2008-10-31 7 views
9

Por ejemplo, supongamos que tengo un archivo por lotes llamado 'test.cmd' y simplemente contiene:¿Por qué hay una diferencia entre la codificación del símbolo del sistema de Windows frente a un archivo por lotes?

echo %1 

puedo llamar a esto directamente desde la línea de comandos con 'test.cmd some¬arg' y el resultado es que la cadena 'some¬arg' se imprime.

Sin embargo, si coloco esa misma llamada en un segundo archivo por lotes, llamado 'tester.cmd' por el bien del argumento, y lo llamo desde el símbolo del sistema, el resultado es que se imprime la cadena 'some%arg'.

¿Qué es lo que estropea la codificación y cómo puedo evitarla? Estoy seguro de haber solucionado esto antes, pero no recuerdo cómo ...

¡Gracias!

+1

¿Estás seguro de que es un signo de porcentaje? En mi máquina es un "¼". – Tomalak

Respuesta

9

Esto es debido a que su archivo por lotes se codifica en una página de códigos diferente que se encuentra actualmente en cmd.exe.

En las configuraciones predeterminadas occidentales, cmd.exe comienza en CP850, pero los editores de texto por lo general trabajan en CP1252 (lo a menudo se denomina erróneamente Latin-1 o ISO-8859-1).

Los caracteres "¬" y "¼" comparten el mismo código de carácter en estas dos páginas de códigos, "BC".

La solución es simple. Codifique su archivo por lotes en la página de códigos 850 o cambie cmd.exe a la página de códigos 1252 emitiendo chcp 1252.

+0

Entonces, sugiriendo que puedo usar chcp 1252 en la parte superior de un archivo por lotes y luego en bucles, ya no necesitaría usar el símbolo double%. – djangofan

+0

@djangofan No, en absoluto. El doble '%%' es un requisito del procesador de comandos y no tiene nada que ver con la codificación de caracteres. – Tomalak

Cuestiones relacionadas