Problemas ao adicionar um prefixo a nomes de arquivos em massa usando um arquivo de lote

0

Estou tentando adicionar um prefixo a todos os nomes de arquivos em uma pasta.

Depois de alguns dias pesquisando na internet, eu criei algo que funciona perfeitamente:

echo        Please specify fileprefix
echo            Your Choise??
set /p pre= ^
for %%i in (*.txt) do ren %%i "
Your Choise??
pre

D:\rntest>ren 1.txt "pre"1.txt

D:\rntest>ren 2.txt "pre"2.txt

D:\rntest>ren 3.txt "pre"3.txt

D:\rntest>ren pre1.txt "pre"pre1.txt
"%%i

O problema é que, se o prefixo começar com um caractere que esteja em ordem alfabética após o primeiro caractere do nome do arquivo, o primeiro arquivo será renomeado duas vezes.

Aqui está a saída ao tentar renomear os três arquivos 1.txt , 2.txt e 3.txt na pasta de teste:

for %%i in ("
echo        Please specify fileprefix
echo            Your Choise??
set /p pre= ^
for %%i in (*.txt) do ren %%i "
Your Choise??
pre

D:\rntest>ren 1.txt "pre"1.txt

D:\rntest>ren 2.txt "pre"2.txt

D:\rntest>ren 3.txt "pre"3.txt

D:\rntest>ren pre1.txt "pre"pre1.txt
"%%i
""
for %%i in ("%pre%""%pre%"*) do ren %%i %%i:~3%
"*) do ren %%i %%i:~3%

Deixando-me com os três arquivos pre2.txt , pre3.txt e prepre1.txt

O problema parece ser que os primeiros arquivos são classificados automaticamente por ordem alfabética durante o processo. O primeiro arquivo é, portanto, movido para a parte inferior e, portanto, está sendo processado novamente. No entanto, não tenho ideia se isso é o que realmente acontece.

Eu tentei desviar de uma depuração para renomear o arquivo novamente após a renomeação inicial.

Aqui está o código

%pre%

Isto parece identificar o nome do arquivo correto (o prefixo duplo), mas ele não faz nada com ele (o nome do arquivo não existe ou já existe um nome de arquivo idêntico). Era suposto remover os três primeiros caracteres do nome do arquivo para me dar o resultado correto.

Acabei de pensar que deve haver uma maneira melhor / mais fácil de fazer isso sem precisar verificar e corrigir erros.

    
por Hannibal83 16.05.2014 / 23:48

2 respostas

1

EDIT: semelhante que nerdwaller estava comentando sobre

Você pode usar o comando dir em um loop for /f para obter o comportamento esperado da seguinte forma:

@echo off
echo        Please specify fileprefix
echo            Your Choise??
set /p pre=
for /f "tokens=1* delims=" %%i in ('dir /b /o:-n /a:-d *.txt') do ren "%%i" "
/b    - Uses bare format (no heading information or summary).
/o:-n - Sort backwards (helps when you have file named similar names like 1.txt and 11.txt)
/a:-d - Don't give any directories (give files only)
%%i"

dir opções de comando explicadas:

@echo off
echo        Please specify fileprefix
echo            Your Choise??
set /p pre=
for /f "tokens=1* delims=" %%i in ('dir /b /o:-n /a:-d *.txt') do ren "%%i" "
/b    - Uses bare format (no heading information or summary).
/o:-n - Sort backwards (helps when you have file named similar names like 1.txt and 11.txt)
/a:-d - Don't give any directories (give files only)
%%i"
    
por 17.05.2014 / 07:20
1

Eu encontrei um utilitário gratuito muito poderoso chamado Bulk Rename Utility para modificar nomes de arquivos do Windows.

Funciona muito bem e eu doei algum dinheiro através do PayPal;

    
por 15.10.2014 / 12:53