[BATCH] Cambiar extension a archivos

Iniciado por ovichan, 19 Septiembre 2012, 16:40 PM

0 Miembros y 1 Visitante están viendo este tema.

ovichan

Buenas  ;-)

Estoy intentando cambiar de manera masiva las extensiones de ciertos archivos, para ello he creado este código

@echo off
Title Renombrar extensiones de archivos

for %%i in ("Anna Grace _ You Make Me Feel.m4r") do (
set filename="%%~ni"
echo %~dp0%filename%.m4r
echo %filename%.m4a
rename %~dp0%filename%.m4r %filename%.m4a
)
pause>nul


Sin embargo, no funciona. Si a partir del set, lo saco del bucle, filename si pilla el nombre pero el rename sigue sin funcionar. Qué estoy haciendo mal.

Saludos y gracias de antemano.

Eleкtro

#1
Hay varias cosas mal y otras que sobran, Aquí tienes:

Código (dos) [Seleccionar]
@echo off
Title Renombrar extensiones de archivos

for %%i in (*.m4r) do (
REM Echo [+] %%~fi & Echo %%~dpni.m4a | MORE
ECHO [Renombrado]: %%~nxi ^> %%~ni.m4a
REN "%%~fi" "%%~ni.m4a"
)
pause>nul




saludos




Cita de: ovichan en 19 Septiembre 2012, 16:40 PM
Si a partir del set, lo saco del bucle, filename si pilla el nombre pero el rename sigue sin funcionar. Qué estoy haciendo mal.
Si quieres mostrar o usar la variable filename como intentabas, usa call y un simbolo de porcentaje extra:
Código (dos) [Seleccionar]
For... (
    Call Echo %%FILENAME%%
    Call RENAME "%%FILENAME%%"
)

O habilita la expansión de variables.
Código (dos) [Seleccionar]
Setlocal enabledelayedexpansion
For... (
    Echo !FILENAME!
)








ovichan

Una preguntilla, por que usas %%~fi, no deberia valer con %%~nxi??? Y.por que el uso de dobles %%, es para que las interprete como las variables locales del bucle??

Eleкtro

#3
Cita de: ovichan en 20 Septiembre 2012, 02:58 AM
Una preguntilla, por que usas %%~fi, no deberia valer con %%~nxi???

En la linea de comentario "REM" simplemente te daba un ejemplo de como expandir a la ruta completa del archivo porque tu lo estabas intentando con "%~dp0"
"NX" expande al nombre y extensión del archivo, No es suficiente a menos que el FOR recorra subdirectorios con el parámetro "\R", en el cual nisiquiera sería necesario expandir a un nombre o ruta, bastaría con usar la variable en sí misma "%%i"

Cita de: ovichan en 20 Septiembre 2012, 02:58 AMY.por que el uso de dobles %%, es para que las interprete como las variables locales del bucle??
Exacto sinó no las reconocería.

Si intentas ejecutar un FOR directamente desde la consola entonces solo debes usar un simbolo %.

EDITO: hmmm ahora que vuelvo a leer tu pregunta creo que te estabas refiriendo a la variable "%%FILENAME%%" es por lo mismo, por la recursividad, si.

Saludos








ovichan

Siento no haber respondido antes, gracias por tu aclaración.

Eleкtro