Canalize a saída de Wmic
a more
:
wmic CPU Get AddressWidth |more >> "C:\test.txt"
Editar para um pouco mais de fundo : o problema que você vê deve-se ao wmic
output ser unicode utf-16. Isso significa que cada caractere (ou mais corretamente, a maioria deles) é codificado em dois bytes. wmic
também coloca a chamada BOM (byte order mark) no início da saída. Veja o conteúdo do byte abaixo:
FF FE 44 00 65 00 73 00-63 00 72 00 69 00 70 00 ..D.e.s.c.r.i.p.
Esses dois primeiros bytes (FF FE) especificam endianness para UTF-16 e permitem que ferramentas de processamento de dados reconheçam a codificação [sendo little endian UTF-16].
Obviamente, type
faz essa verificação e, se encontrar a BOM, reconhece corretamente a codificação.
Por outro lado, se você primeiro echo text
e, em seguida, anexar Wmic
output - não há uma lista de materiais no início e você pode ver uma codificação inconsistente:
74 65 78 74 20 0D 0A 44-00 65 00 73 00 63 00 72 text ..D.e.s.c.r
Se você colocá-lo através de type
ele não pode inferir como interpretar, / mais provável / assume um único byte ('ANSI') e isso resulta em espaços produzidos para caracteres não imprimíveis (zeros, sendo de fato bytes de alta ordem codificação de caracteres de dois bytes).
more
lida com mais casos (trocadilhos) e produz resultados corretos para caracteres ASCII básicos, por isso é comumente usado como um hack para esse propósito.
Uma nota adicional: alguns editores (sendo o bloco de notas o exemplo mais simples) exibirão corretamente o arquivo codificado utf-16 se ele for consistente - mesmo sem BOM. Existe uma maneira de forçar echo
a produzir saída unicode (mas cuidado, ela não produz BOM) - usar cmd /u
faz com que a saída para comandos internos seja unicode.
Eu realmente não posso dizer por que o suporte a cmd unicode é tão limitado (ou como diria - quebrado ...) - provavelmente problemas históricos / de compatibilidade.
Por último, se você precisar de um melhor suporte a unicode (entre muitos outros benefícios), eu recomendaria migrar para powershell