Archivos con caracteres no ASCII en el nombre del archivo en un archivo por lotes de Windows

Archivos con caracteres no ASCII en el nombre del archivo en un archivo por lotes de Windows

En una computadora Windows habitual (occidental), tengo un archivo

файл.txt

con letras que no sean ASCII en el nombre del archivo. ¿Cómo puedo hacer lo siguiente desde un archivo .bat?

dir файл.txt
ren файл.txt file.txt

etc.?

Intenté colocar los comandos anteriores en un archivo mybat.bat(usando codificación UTF-8 o UTF-16), pero no funciona incluso si lo ejecuto como cmd /u /c mybat.bat.

Nota: la pregunta no es cómo poner esas letras en un archivo por lotes, sino cómo hacer que el archivo por lotes haga lo que se espera (en mi ejemplo, enumerar el archivo y luego cambiarle el nombre).

Nota: dir > log.txtel comando muestra el archivo файл.txt como ????.txt. Sin embargo, dirmuestra este archivo en la pantalla correctamente como файл.txt.

Respuesta1

Tu principal problema es la fuente.https://stackoverflow.com/questions/9321419/unicode-utf-8-text-file-gibberish-on-windows-console-trying-to-display-hebrewCon la fuente correcta no aparecerán signos de interrogación. Entonces deberías agregar Courier New al símbolo del sistema. Luego podrá escribir o mostrar/hacer eco de dichos caracteres.

Si luego descubre que algunos comandos tienen problemas, intente con chcp 65001 (en respuesta a su pregunta, tenga la seguridad de que chcp 65001 solo afectará esa ventana de solicitud de cmd). Necesitaría chcp 65001 para que la redirección funcione con caracteres más allá de \u7F, por ejemplo, ese dir >asdfcomando para escribir un archivo con esos caracteres necesitará chcp 65001. Pero su comando ren funciona bien sin 65001.

Nota: OP señala una corrección a esto. Su fuente estaba bien. Pero necesitaba chcp 65001.

Otro caso en el que se necesita chcp 65001 es si un archivo por lotes está en utf8. De lo contrario, incluso al ejecutar un archivo por lotes con solo letras como привет , se convertirán en signos de interrogación.

OP también señala una excelente solución para el problema de que el bloc de notas guarda con utf-8 con BOM, mientras que chcp 65001 es UTF-8 sin BOM. Y si tiene un archivo por lotes codificado como utf-8 con bom, que dice solo, por ejemplo, dir o echo привет, entonces no funcionará, incluso si cmd tiene la codificación 65001. Porque cmd mezcla la lista de materiales en la primera línea. Entonces, una solución alternativa es colocar los comandos comenzando desde la segunda línea. (Como alternativa, se podría utilizar un editor de texto que guarde como utf-8 sin BOM).

información relacionada