(Solucionado) [Batch] Problema con este caracter especial: !

Iniciado por SuperDraco, 1 Abril 2011, 08:47 AM

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

SuperDraco

hola...
En una carpeta tengo este archivo:

South Blast! 'Electric Carnival' Remix.mp3


y ejecuto este código:
Código (dos) [Seleccionar]
for /f "tokens=*" %%a in ('dir /B *.mp3') do (
set nombre=%%a
echo !nombre!
pause
)


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

Necesito que me reconozca el signo de exclamación !

¿Como lo hago?
No he vuelto, solo estoy de paso.

leogtz

Código (dos) [Seleccionar]
@echo off
for /f "tokens=*" %%_ in ('dir /b *.mp3') do (
call:show "%%_"
goto:eof
)
:show
echo %~1
goto:eof
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

SuperDraco

#2
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 (dos) [Seleccionar]
for /f "tokens=*" %%_ in ('dir /b *.m4a') do (
echo %%a
pause
)

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 (dos) [Seleccionar]

dir /B *.m4a >nul 2>&1
IF %ERRORLEVEL% EQU 0 (
call :FIND_M4A
)

:FIND_M4A
for /f "tokens=*" %%a in ('dir /B *.m4a') do (
cls
echo %%a
pause
set /a num+=1
echo+
Colous writesec "[7]Convirtiendo el audio:" & echo+
Call :Rename_M4A
Etc...
)


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.
No he vuelto, solo estoy de paso.

SuperDraco

#3
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?

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
No he vuelto, solo estoy de paso.

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com