me importa alrededor de tres conceptos:
salida de la consola de codificación
Línea de comando interno Al codificación (que cambió con chcp)
.bat Codificación de texto
El escenario más fácil para mí: me tendrá los dos primeros mencionados en la misma codificación, por ejemplo CP850, y voy a guardar mi .bat en esa misma codificación (en Notepad ++, menú codificación → Juegos de caracteres → Europa occidental → OEM 850).
Pero supongamos que alguien me da una .bat en otro sistema de codificación, por ejemplo CP1252 (en Notepad ++, menú Codificación * → Juegos de caracteres → Europa occidental → de Windows-1252)
Entonces me gustaría cambiar la codificación interna de línea de comando, con chcp 1252.
Esto cambia la codificación que utiliza para hablar con otros procesos, ni el dispositivo de entrada ni la consola de salida.
Por lo tanto, mi instancia de línea de comandos efectivamente enviará caracteres en 1252 a través de su descriptor de archivo STDOUT, pero aparece texto agrupado cuando la consola los descodifica como 850 (é es Ú).
Entonces modifique el archivo de la siguiente manera:
@echo off
perl -e "use Encode qw/encode decode/;" -e "print encode('cp850', decode('cp1252', \"ren -hlice hlice\n\"));"
ren -hlice hlice
Primero gire ECHO fuera lo que los comandos no se genera de forma explícita a menos que con cualquiera de eco ... o perl -e "Imprimir ..."
entonces puse este texto modelo cada vez que necesito para demostrar algo
perl -e "uso Codificar QW/decodificación de codificación /;" -e "print encode ('cp850', decode ('cp1252', \" ren -hélice hélice \ n \ "));"
Sustituyo el texto real que mostraré para esto: ren -hélice hélice.
Y también podría necesitar sustituir mi codificación de consola para cp850 y otra codificación lateral para cp1252.
Y justo debajo pongo el comando deseado.
Rompí la línea problemática en la mitad de salida y la mitad real del comando.
La primera parte mía segura: la "e" se interpreta como una "E" por medio de transcodificación. Es necesario para todas las oraciones de salida ya que la consola y el archivo están en diferentes codificaciones.
El segundo, el comando real (murmurado con @echo off), sabiendo que tenemos la misma codificación tanto de chcp como del texto .bat es suficiente para asegurar una interpretación adecuada del carácter.
chcp funciona en .bat, incluso si el eco es incorrecto. Sin embargo, si hago chcp 1252 en la consola, y luego escribo test.bat, sigue siendo incorrecto ... – shodanex
Por supuesto que está mal. 'type' no sabe nada acerca de la página de códigos, por lo que asume la que tiene configurada actualmente. Lo que hace 'chcp' en el lote es * cambiar * esa página de códigos, de ahí los diferentes resultados. Presenté esto más como una solución de todos modos. La solución correcta es guardar el archivo por lotes en la codificación correcta. – Joey
de hecho, la "entrada" de caracteres y la "salida" de caracteres a la pantalla son dos cosas diferentes.Si cambio de la policía de la consola: chcp 850 seguido del tipo me da hÛlice chcp 1252 seguido por el tipo me da Hélice Parece que la página de códigos de la policía de trama predeterminado no se cambia por chcp – shodanex