Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: ovichan en 19 Septiembre 2012, 16:40 pm



Título: [BATCH] Cambiar extension a archivos
Publicado por: ovichan en 19 Septiembre 2012, 16:40 pm
Buenas  ;-)

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

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.


Título: Re: [BATCH] Cambiar extension a archivos
Publicado por: Eleкtro en 20 Septiembre 2012, 02:49 am
Hay varias cosas mal y otras que sobran, Aquí tienes:

Código
  1. @echo off
  2. Title Renombrar extensiones de archivos
  3.  
  4. for %%i in (*.m4r) do (
  5. REM Echo [+] %%~fi & Echo %%~dpni.m4a | MORE
  6. ECHO [Renombrado]: %%~nxi ^> %%~ni.m4a
  7. REN "%%~fi" "%%~ni.m4a"
  8. )
  9. pause>nul

(http://img42.imageshack.us/img42/9140/captura1li.png)

saludos



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
  1. For... (
  2.    Call Echo %%FILENAME%%
  3.    Call RENAME "%%FILENAME%%"
  4. )
  5.  
O habilita la expansión de variables.
Código
  1. Setlocal enabledelayedexpansion
  2. For... (
  3.    Echo !FILENAME!
  4. )


Título: Re: [BATCH] Cambiar extension a archivos
Publicado por: ovichan en 20 Septiembre 2012, 02:58 am
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??


Título: Re: [BATCH] Cambiar extension a archivos
Publicado por: Eleкtro en 20 Septiembre 2012, 03:05 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"

Y.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


Título: Re: [BATCH] Cambiar extension a archivos
Publicado por: ovichan en 27 Septiembre 2012, 16:14 pm
Siento no haber respondido antes, gracias por tu aclaración.


Título: Re: [BATCH] Cambiar extension a archivos
Publicado por: Eleкtro en 27 Septiembre 2012, 16:32 pm
Para eso estamos ::)

Saludos.