tutorial script run programing from files example commands batch bat batch-file command-line cmd windows-vista

batch file - script - chcp 65001 y un archivo.bat



run bat file from cmd (5)

Tengo un problema con el comando chcp 65001 en el shell de Windows.

Necesito generar una lista de archivos en una carpeta. Entonces ejecuté cmd.exe, mecanografié

cd folder dir /B /O:N > list_of_files.txt

Funcionó, pero tuve un problema con los caracteres especiales, no ASCII que están en algunos nombres de archivo. Así que agregué chcp 65001

Todo funcionó, pero cuando puse estos comandos en un archivo .bat, el script no funciona.

Asi que

cd folder chcp 65001 dir /B /O:N > list_of_files.txt

no genera la lista.

y

cd folder chcp 65001 && dir /B /O:N > list_of_files.txt

tanto como

cd folder chcp 65001 > nul && dir /B /O:N > list_of_files.txt

genera la lista, pero con la codificación predeterminada: /.

Todo funciona en cmd.exe, pero no en archivos .bat.

He leído el tema: stackoverflow.com/questions/2182568/batch-script-is-not-executed-if-chcp-was-llamado , pero no ayudó.

EDITAR: chcp 65001 parcialmente mi problema, cambiando chcp 65001 a chcp 1250 porque todos los caracteres estaban en esta codificación. Pero en realidad esto no responde la pregunta.


Probado únicamente en Windows 7, puede no funcionar en Windows Vista.

Aparentemente chcp no afecta directamente a dir .

Analiza la salida de dir e imprime a través de echo :

chcp 65001 >list_of_files.txt (for /f "delims=" %%a in (''dir /B /O:N'') do echo %%a)

Nota: el archivo de salida no tendrá la marca de orden de bytes UTF-8.


Use cmd /U Ver http://ss64.com/nt/cmd.html :

Los archivos de texto más comunes son ANSI, use estos conmutadores cuando necesite convertir el juego de caracteres. Estas opciones afectarán la canalización o la redirección a un archivo:

  • /A Caracteres ANSI de salida
  • /U Salida caracteres UNICODE (UCS-2 Little Endian)

Aquí está mi intento (iniciarlo en cmd /A , por supuesto):

@ECHO OFF >NUL SETLOCAL EnableExtensions :: create a UNICODE file with Byte Order Mark using `wmic` chcp 852 >NUL >list_of_files.txt wmic os get localdatetime :: store a line with BOM to a variable :: although FINDSTR does not support UTF-16 files :: it will read first three bytes at least for /F "delims=" %%G in ('' findstr "^" list_of_files.txt '') do set "UTF8BOM=%%G" :: write BOM only* to a file (* echo writes hexadecimal value FFFE0D0A) :: the `<NUL set /p =text` trick does not work: chokes down leading `FF` >list_of_files.txt echo(%UTF8BOM:~0,2% chcp 65001 >NUL :: add CRLF in Unicode (hexadecimal 0D000A00) >>list_of_files.txt cmd /U /C echo( :: add result of `dir /B /O:N` in Unicode >>list_of_files.txt cmd /U /C dir /B /O:N :: check the result: still invalid first line, see output type list_of_files.txt chcp 852 >NUL

Salida . Aún primera línea inválida (ese 0D0A hexadecimal), lo siento; use otro método para obtener la marca de orden de bytes Utf-8 pura :

==>cmd /A /C D:/bat/SO/UTF8BOM32182619.bat ਍ cpANSI_OoCcSsUu.txt cpANSI_ÖöÇ窺Üü.txt escrzyaie.txt ěščřžýáíé.txt list_of_files.txt ==>


En Windows 2003 funcionó esto:

chcp 65001 && cmd /C dir C:/WINDOWS/* && chcp 866

C:/windows/* - única muestra

&& chcp 866 - página de códigos predeterminada y esto permite continuar el lote


"chcp 65001" no funciona antes de Windows 7. Hará que el lote finalice inmediatamente. No hay solución alternativa.

Lo he verificado probando directamente 2003, XP, Vista, 2008, 7, 8 y 10.


parece un problema que conocí recientemente

cd folder dir /B /O:N > list_of_files.tmp cmd /U /C type list_of_files.tmp>list_of_files.txt del list_of_files.tmp