Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: SuperDraco en 1 Abril 2011, 08:47 am



Título: (Solucionado) [Batch] Problema con este caracter especial: !
Publicado por: SuperDraco en 1 Abril 2011, 08:47 am
hola...
En una carpeta tengo este archivo:

South Blast! 'Electric Carnival' Remix.mp3


y ejecuto este código:
Código
  1. for /f "tokens=*" %%a in ('dir /B *.mp3') do (
  2. set nombre=%%a
  3. echo !nombre!
  4. )

El resultado de echo es esto:
Código:
South Blast 'Electric Carnival' Remix.mp3

Necesito que me reconozca el signo de exclamación !

¿Como lo hago?


Título: Re: [Batch] Problema con este caracter especial: !
Publicado por: leogtz en 1 Abril 2011, 15:39 pm
Código
  1. @echo off
  2. for /f "tokens=*" %%_ in ('dir /b *.mp3') do (
  3. call:show "%%_"
  4. goto:eof
  5. )
  6. :show
  7. echo %~1
  8. goto:eof
  9.  


Título: Re: [Batch] Problema con este caracter especial: !
Publicado por: SuperDraco en 5 Abril 2011, 16:52 pm
Tu código funciona, pero no cuando yo quiero :/


me explico, si creo un archivo .bat con tu código, lo pruebo y funciona, funciona incluso sin el call... osea, el call :show no hace falta se muestra el ! sin necesidad del call

Código
  1. for /f "tokens=*" %%_ in ('dir /b *.m4a') do (
  2. echo %%a
  3. )
  4.  
ese code me muestra el archivo .m4a con el caracter !



Ahora bien, en esta parte de un script mio no me muestra el caracter, cual es la diferencia??? donde está el problema???

Código
  1. dir /B *.m4a >nul 2>&1
  2. IF %ERRORLEVEL% EQU 0 (
  3. call :FIND_M4A
  4. )
  5.  
  6. :FIND_M4A
  7. for /f "tokens=*" %%a in ('dir /B *.m4a') do (
  8. cls
  9. echo %%a
  10. set /a num+=1
  11. Colous writesec "[7]Convirtiendo el audio:" & echo+
  12. Call :Rename_M4A
  13. Etc...
  14. )
  15.  

EDITO: El script tiene setlocal enabledelayedexpansion (por si pudiera ser la cause del problema :/)

He intentado aplicar tu función la del call :show, pero no se como hacerlo en esa parte de mi script, porque lo que quiero no es mostrarla con echo %~1, sino que el FOR coja bien el nombre del archivo m4a con el signo de exclamacion, para proseguir con el resto del batch... no se si me explico :S



EDITO 2: Definitivamente creo que el problema lo cause el setlocal             enabledelayed, porque si lo quito del script funciona correctamente xD

claro..debe ser eso por los signos de exclamacion, que tonto estoy.

lo doy por solucionado.


Título: Re: (Solucionado) [Batch] Problema con este caracter especial: !
Publicado por: SuperDraco en 5 Abril 2011, 17:05 pm
Tengo una pregunta más.

Puedo desactivar delayedexpansion dentro de ese call, para que el FOR coja el nombre bien, y despues de eso volverlo a activarlo enseguida?

quiero decir, es tan facil como hacer esto asi?

Código:
Setlocal enabledelayedexpansion
FOR in dir .m4 blablabla....
Setlocal disabledelayedexpansion
echo %%a
Setlocal enabledelayedexpansion
goto:...
etc...

Ya me contesto a mi mismo: Si, se puede!

Solucionado  :xD gracias Leo


Título: Re: (Solucionado) [Batch] Problema con este caracter especial: !
Publicado por: leogtz en 5 Abril 2011, 22:39 pm
Creo que puedes usar endlocal.