cmd de alguna manera está escribiendo texto chino como salida

Tengo algunos problemas con cmd.exe, lo uso a veces para crear archivos y escribir allí el resultado. Pero si pruebo esto:

wmic logicaldisk get name, freespace >> output.txt echo %date% >> output.txt 

Y lo comienzo 2-3 veces, obtengo un output.txt como:

 FreeSpace Name 17990881280 C: D:㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀    一愀洀攀  ഀ਀㄀㜀㤀㤀 㠀㠀㄀㈀㠀   䌀㨀    ഀ਀             䐀㨀    ഀ਀㄀⸸㐰㈮㄰′਍ 

Bueno, este texto chino parece curioso, pero me gustaría ver la fecha. Creo que de alguna manera la encoding se cambia con la fecha. Porque si echo echo% date% >> output.txt solo todo está bien, obtengo la fecha. ¿Qué debo hacer? Me gustaría obtener la salida wmic y la fecha. ¿Algunas ideas? Gracias

WMIC tiene una salida extraña. He visto una discusión donde se decía que WMIC usa unicode, pero creo que la situación es más complicada que eso. Si capturo la salida de WMIC en un archivo y uso un editor hexadecimal, veo un retorno de carro adicional al final de cada línea. No entiendo cómo el contenido de la fecha se convierte en galimatías cuando se escribe el archivo output.txt. (¿problema con la página de códigos? ¿pero cómo?) En mi máquina recibo signos de interrogación donde debería estar la fecha.

Pude solucionar el problema usando

 wmic logicaldisk get name, freespace | more >>output.txt echo %date%>>output.txt 

La razón es que WMIC saca a UNICODE. Mientras que los comandos por lotes se envían a ANSI por defecto. Como la página de códigos ANSI es más pequeña que UNICODE y se mapea de forma diferente, la conversión entre ellos se convierte en un problema. Hay varias formas de resolver este problema.

A. Inicie el shell de comandos con el modificador / U o, si ya está en el símbolo del sistema, simplemente escriba cmd / U.

Ayuda del comando “Ayuda cmd”: / U Hace que la salida de comandos internos a un conducto o archivo sea Unicode

Por lo tanto, terminará con un archivo de texto UNICODE y su código original no necesita modificaciones. Sin embargo, deberá recordar usar siempre el modificador / U. También la forma correcta de hacerlo es:

  wmic /OUTPUT:output.txt logicaldisk get name, freespace echo %date% >> output.txt 

B. Convierta la salida WMIC a ANSI (Recomendado. Sin embargo, depende de lo que necesite. Simplemente le facilita la vida cuando decide agregar al archivo de texto. Sin embargo, tendrá que usar 2 archivos de salida).

  wmic /OUTPUT:output.tmp logicaldisk get name, freespace TYPE output.tmp > output.txt echo %date% >> output.txt 

Espero que esto ayude a alguien.

Descubrí que un script por lotes utilizado para crear un archivo de salida txt usando stdout “>>” para crear el archivo txt es compatible con el formato de salida de powershell ascii, utf8 y utf7, todos los demás formatos de salida dan como resultado espacios adicionales en el archivo.

Si el archivo de salida se crea con powershells stdout “>>”, cualquier adición de stdout al archivo desde un script por lotes aparecerá como caracteres chinos.

La solución alternativa en mi caso era volver a crear el archivo de salida con el script por lotes y estará en el formato correcto y las adiciones posteriores de PowerShell deben usar “| out-file -encoding ascii / utf8 / utf7”