¿Cómo recorrer las carpetas y cambiar el nombre de las extensiones en un archivo por lotes?


2

Seleccionando una sola carpeta que podría ejecutar

ren *.jpeg *.png

Tengo varias carpetas. Quiero crear un archivo por lotes que recorrerá todas las carpetas y cambiará el nombre de los archivos que contiene.

Por ejemplo tengo carpetas TEST1 y TEST2 dentro del directorio raíz TEST. Quiero crear un lote que cambie el nombre de todos los .jpeg archivos dentro de TEST1 y TEST2 a .png.

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

Estoy recibiendo un error:

El sistema no puede encontrar el archivo especificado

No entiendo el problema.


Creo que el error se produce para cada carpeta que no tiene archivos "jpeg" en su interior.
kokbira

Respuestas:


3

No estás aplicando el for comando a la ren acción.

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

Necesitas cambiar %% a % si está haciendo esto de forma interactiva, y no en un archivo por lotes.

los ~ Se eliminan las comillas, que se vuelven a agregar, para evitar posibles errores con las rutas que contienen espacios.


ok, tu solución es más pequeña :) - Usé una vieja que tengo en mi biblioteca de bat. No probé el tuyo pero creo en ti.
kokbira

1

O, si quieres una línea un poco más corta, aquí tienes cómo hacerlo con una combinación de REN mando y el GLOBAL mando en JP Software's TCC / LE :

GLOBAL REN *.JPEG *.PNG

Utilizar GLOBAL es /I opción si desea ignorar cualquier código de salida que no sea cero de la REN comando, por supuesto.


0

Una solución completa está abajo.

Establecer las variables en la sección "variables":

@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

aparece un "archivo no encontrado" para cada carpeta que no tiene archivos "jpeg".
kokbira

1
Whoa Cosas locas. ¿Y qué es ese negocio con %PATH%?
paradroid

bueno, cuando creé mi primera versión de un lote de renombrador, no sabía nada de pushd y popd, jaja. por lo que ":: ve a% path% y su activador" = pushd, :: regresa a% pathbak% y su activador = popd :)
kokbira

Pero creo que es tan didáctica y una solución "más controlada".
kokbira

Veo. Usted podría simplemente usar %SystemDrive% Si querías la unidad del sistema por cualquier motivo.
paradroid
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.