Como percorrer pastas e renomear extensões em um arquivo de lote?

2

Selecionando uma única pasta que eu pude rodar

ren *.jpeg *.png

Eu tenho várias pastas. Eu quero criar um arquivo em lotes que irá percorrer todas as pastas e irá renomear os arquivos dentro dele.

Por exemplo, tenho pastas TEST1 e TEST2 dentro do diretório raiz TEST . Desejo criar um lote que renomeie todos os arquivos .jpeg em TEST1 e TEST2 para .png .

FOR /R "E:\TEST\" %%G in (*.jpeg) DO ren *.jpeg *.png

Estou recebendo um erro:

The system can not find the file specified

Eu não entendo o problema.

    
por user839765 12.07.2011 / 22:01

3 respostas

3

Você não está aplicando o comando for à ação ren .

for /r "E:\test\" %%G in (*.jpeg) do ren "%%~G" *.png

Você precisa alterar %% para % se estiver fazendo isso de forma interativa e não em um arquivo em lotes.

As ~ retiram aspas, que são adicionadas novamente, para evitar possíveis erros com caminhos que contenham espaços.

    
por 12.07.2011 / 22:19
1

Ou, se você quiser um one-liner um pouco mais curto, veja como fazer isso com uma combinação do REN commmand e o GLOBAL commmand em TCC / LE da JP Software :

GLOBAL REN *.JPEG *.PNG

Use a opção GLOBAL /I se você quiser ignorar qualquer código de saída diferente de zero do comando REN , é claro.

    
por 19.07.2011 / 14:25
0

Uma solução completa está abaixo.

Defina as variáveis na seção "variáveis":

@echo off

::only to tell user what this bat are doing
echo.1.initializing...

::enable that thing to allow, for example, incremental counter in a for loop :)
echo.- EnableDelayedExpansion
SETLOCAL EnableDelayedExpansion

::variables
echo.- variables
:: - place here the absolute root path of your files
set path2work="C:\Documents and Settings\ubirajara2\Desktop\Nova pasta"
set extension2exclude=jpeg
set extension2put=png

::only an auxiliar variable
set pathbak=%cd%

::go to %path2work% and its drive letter
echo.- entering the path you want
for /f "delims=¯" %%i in ('echo.%path2work%') do %%~di
cd %path2work%

::search all subfolders and save them to a temp file
echo.- searching for subfolders
echo.%path2work%>%temp%\tmpvar.txt
for /f "delims=¯" %%i in ('dir /s /b /on /ad') do echo."%%i">>%temp%\tmpvar.txt

::execute command for root folder and all found subfolders
echo.
echo.2.executing...
for /f "delims=¯" %%i in (%temp%\tmpvar.txt) do (
  cd %%i
  echo.- in folder: %%i
  for /f "delims=¯" %%j in ('dir /b /on /a-d *.%extension2exclude%') do (
    set newname=%%~nj.%extension2put%
    echo.- renaming from "%%j" to "!newname!"...
    ren "%%j" "!newname!"
  )
)

echo.
echo.3.exiting...
::return to %pathbak% and its driveletter
for /f "delims=¯" %%i in ('echo.%pathbak%') do %%~di
cd %pathbak%

@echo on
    
por 12.07.2011 / 22:26