Lote. Cambio masivo de nombres de archivos en la carpeta y todas las subcarpetas

Lote. Cambio masivo de nombres de archivos en la carpeta y todas las subcarpetas

Intento cambiar el nombre de todos los archivos en carpetas y subcarpetas eliminando la parte "-min" de cada nombre de archivo con la ayuda de secuencias de comandos por lotes en win7.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
FOR /R %%A in (.*)-min.png DO REN "%%A-min.png" "%%A.png"

Parece que algo anda mal aquí con el parámetro SET, supongo, así que trato de hacerlo así:

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
    SET "oldname=%%G"
    SET "newname=!oldname:~0,-8!.png"
    REN "!oldname!" "!newname!"
)

pero todo lo que obtengo son errores. Cuando hago eco de la última instrucción del bucle, me proporciona las rutas adecuadas. ¿Qué me estoy perdiendo?

Respuesta1

Al cambiar el nombre de un archivo, no puede incluir la ruta de la carpeta en el nombre de destino. Puede utilizar %%~nxGpara obtener el nombre del archivo y la extensión sin la ruta. No necesitas la variable oldname; simplemente puedes usar %%G. Puede eliminar una línea y realizar la manipulación de la cadena directamente en la declaración REN.

@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
CD F:\Mega.Pack-128x128\textures\
For /R %%G in (*-min.png) DO (
    SET "newname=%%~nxG"
    REN "%%G" "!newname:~0,-8!.png"
)

Tenga en cuenta que lo anterior fallará si alguna parte de la ruta del archivo incluye el !carácter porque la expansión de la variable FOR ocurre antes de la expansión retrasada, por lo que dañará el valor. Cualquiera !puede conservarse asegurándose de que la expansión retrasada esté desactivada cuando se expanda la variable FOR. Esto requiere activar y desactivar la expansión retardada dentro del bucle.

@echo off
setlocal disableDelayedExpansion
cd F:\Mega.Pack-128x128\textures\
for /r %%G in (*-min.png) do (
  set "oldpath=%%G"
  set "newname=%%~nxG"
  setlocal enableDelayedExpansion
  ren "!oldpath!" "!newname:~0,-8!.png"
  endlocal
)

información relacionada