Desejo renomear os arquivos e pastas em massa a qualquer momento, como posso fazer isso com scripts em lote

0

Eu quero renomear os arquivos e pastas em massa a qualquer momento, como posso fazer isso com scripts em lote

Eu tenho o código para alterar apenas um arquivo ou pasta, não ambos

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET old=newdocV9
SET new=newdocV10
for /f "tokens=*" %%f in ('dir /b *.*') do (
  SET newname=%%f
  SET newname=!newname:%old%=%new%!
  move "%%f" "!newname!"
)

Estou procurando o código para renomear os arquivos e pastas de uma só vez usando o script em lote

    
por user422056 24.02.2015 / 11:59

3 respostas

0

Dbenham está certo, seu código postado existente deve renomear arquivos e pastas . O único ponto questionável é o seguinte: move folder folder com a mesma Source e Target pode resultar em um ponto de interrupção com a mensagem de erro The process cannot access the file because it is being used by another process (veja um exemplo na saída abaixo). if /I simples poderia resolvê-lo da seguinte forma:

@echo off
SETLOCAL enableextensions enabledelayedexpansion
SET "old=ACK"
SET "new=XYZ"
for /f "tokens=*" %%f in ('dir /b *%old%*.*') do (
  SET "newname=%%~f"
  SET "newname=!newname:%old%=%new%!"
  if /I "!newname!"=="%%~f" (
        echo ==== "%%~f"
    ) else (
        echo move "%%~f" "!newname!"
    )
)
ENDLOCAL
goto :eof

Saída:

==>D:\bat\SuperUser1861.bat
move "ACKnowledge" "XYZnowledge"
move "assocbackup.txt" "assocbXYZup.txt"
move "ftypebackup.txt" "ftypebXYZup.txt"
move "StackOverflow" "StXYZOverflow"

==>move "ftypebackup.txt" "ftypebackup.txt"
        1 file(s) moved.

==>move "StackOverflow" "StackOverflow"
The process cannot access the file because it is being used by another process.

==>
    
por 24.02.2015 / 13:23
0

o código não está funcionando para mim @echo off SETLOCAL enableextensions enabledelayedexpansion SET "old = newdocV9" SET "new = newdocV10" para / f "tokens = *" %% f em ('dir / b % old% . *') do (   SET "newname = %% ~ f"   SET "newname =! Newname:% old% =% new%!"   if / I "! newname!" == "%% ~ f" (         echo ==== "%% ~ f"     ) outro (         echo move "%% ~ f" "! newname!"     ) ) ENDLOCAL goto: eof

Eu tenho uma pasta chamada

/ b ----- (Dentro dessa pasta) ---- / doc10 (subpasta) ------- Dentro disso --- 1.txt, 2.tx .....

Eu quero renomear todos os arquivos de uma só vez

    
por 27.02.2015 / 19:20
-1

O problema aqui é que um comando SET não funciona quando usado dentro ().

Para superar este problema, você pode criar um segundo arquivo de lote e colocar todos os comandos lá, então referencie aquele batchfile de seu comando FOR .

Seu segundo lote será parecido com isto:

::dorename.cmd
SET old=newdocV9
SET new=newdocV10

SET newname=%1
SET newname=!newname:%old%=%new%!
move "%%f" "!newname!"

Seu comando será parecido com isto:

for /f "tokens=*" %%f in ('dir /b *.*') do dorename %%f
    
por 24.02.2015 / 12:51

Tags