¿Por qué hay una diferencia entre la codificación de la solicitud de comando de Windows frente a un archivo por lotes?
-
05-07-2019 - |
Pregunta
Por ejemplo, supongamos que tengo un archivo por lotes llamado 'test.cmd'
y simplemente contiene:
echo %1
Puedo llamar esto directamente desde el símbolo del sistema con 'test.cmd some¬arg'
y el resultado es que se imprime la cadena 'some¬arg'
.
Sin embargo, si hago esa misma llamada en un segundo archivo por lotes, llamado 'tester.cmd'
por el bien del argumento, y lo llamo desde la línea de comandos, el resultado es que la cadena < Se imprime el código> 'algo% arg' .
¿Qué es lo que desordena la codificación y cómo puedo evitarlo? Estoy seguro de que he solucionado esto antes, pero no recuerdo cómo ...
¡Gracias!
Solución
Esto se debe a que su archivo por lotes está codificado en una página de códigos diferente a la que se encuentra actualmente en cmd.exe.
En las configuraciones predeterminadas occidentales, cmd.exe se inicia en CP850 , pero los editores de texto generalmente trabajan en CP1252 (lo que a menudo se denomina erróneamente Latin-1 o ISO-8859-1).
Los caracteres " ¬ " y " ¼ " comparte el mismo código de carácter en estas dos páginas de código, " 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
.