2010-11-03 8 views
6

Me doy cuenta de que puede escapar símbolos y símbolos en archivos de proceso por lotes utilizando el carácter de sombreroEscapar símbolos en archivos por lotes de Windows

p.

echo a ^& b 
a & b 

Pero estoy usando el comando

for /f "tokens=*" %%A IN ('DIR /B /A-D /S .acl') DO ProcessACL.cmd "%%A" 

que está encontrando todos los archivos denominados '.acl' en el directorio actual, o un subdirectorio del directorio actual.

El problema es que estoy buscando nombres de ruta que incluyen el carácter '&' (y no, no se pueden renombrar), y necesito una forma de escapar automáticamente de los símbolos y llamar al segundo archivo por lotes con el camino de escape como el parámetro.

rem ProcessACL.cmd 
echo %1 

Respuesta

7

El problema no es el escape, parece estar en el segundo script.

Si hay una línea como

echo %1 

Entonces es expande y falla:

echo You & me.acl 

mejor utilizar expansión retardada como

setlocal EnableDelayedExpansion 
set "var=%~1" 
echo !var! 

Para evitar también problemas con signo de exclamación puntos ! en el parámetro, se debe usar el primer set en un contexto DisabledDelayedExpansion.

set "var=%~1" 
setlocal EnableDelayedExpansion 
echo !var! 
+0

Los archivos con "&" ahora funcionan, pero los archivos con "!" ya no funciona – ariel

+0

@ariel Gracias por la pista, agregué una solución para ese punto también – jeb

0

Su para la línea debe ser (nótese el .acl *)

for /f "tokens=*" %%A IN ('DIR /B /A-D /S *.acl') DO ProcessACL.cmd "%%A" 

ProcessACL.cmd puede acceder a la ruta que se le pasa a 1%.

// ProcessACL.cmd 
ECHO %1 

Todo lo que contiene la variable% 1 está totalmente contenido. No hay necesidad de escapes. Los escapes son para que el procesador por lotes interprete los caracteres que está analizando.

+1

Gracias por su respuesta. El '.acl' busca específicamente un archivo llamado '.acl', no todos los archivos con la extensión de .acl. Ya estoy usando% 1 en el archivo ProcessACL.cmd, y esto produce el error "& was unexpected in this time", cuando% 1 contiene una ruta que incluye un signo &. – Bryan

Cuestiones relacionadas