我有一些与cmd.exe的麻烦,我有时使用它来创build文件,并在那里写输出。 但是,如果我尝试这个:
wmic logicaldisk get name, freespace >> output.txt echo %date% >> output.txt
我开始它2-3次,我得到一个output.txt像:
FreeSpace Name 17990881280 C: D:㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀 一愀洀攀 ഀ㜀㤀㤀 㠀㠀㈀㠀 䌀㨀 ഀ 䐀㨀 ഀ⸸㐰㈮′
那么这里的中文文字看起来很有趣,但我想看看date。 我认为编码随着date而改变。 因为如果我做echo%date%>> output.txt一切都很好,我得到的date。 我该怎么做,我想获得wmic输出和date。 有任何想法吗? 谢谢
WMIC有一些奇怪的输出。 我曾经看过有关WMIC使用unicode的讨论,但我认为情况比这更复杂。 如果我将WMIC输出捕获到一个文件并使用十六进制编辑器,我在每行的末尾看到一个额外的回车。 当输入output.txt时,如何将日期内容转换为乱码,我完全不知所措。 (codepage问题?但如何?)在我的机器上,我得到的问号应该是日期。
我能够通过使用来解决这个问题
wmic logicaldisk get name, freespace | more >>output.txt echo %date%>>output.txt
原因是WMIC输出到UNICODE。 批处理命令默认输出为ANSI。 由于ANSI代码页比UNICODE小,并且映射不同,所以它们之间的转换成为一个问题。 有几种方法可以解决这个问题。
A.用/ U开关启动命令shell,或者如果已经在命令提示符下,输入cmd / U。
从“Help cmd”命令获得帮助:/ U使内部命令对管道或文件的输出成为Unicode
因此,你将最终得到一个UNICODE文本文件,你的原始代码不需要修改。 但是,您需要记住始终使用/ U开关。 另外正确的方法是:
wmic /OUTPUT:output.txt logicaldisk get name, freespace echo %date% >> output.txt
B.将WMIC输出转换为ANSI(推荐使用,但是取决于你所需要的东西,只是当你决定添加到文本文件时使生活更容易,但是你将不得不使用2个输出文件)。
wmic /OUTPUT:output.tmp logicaldisk get name, freespace TYPE output.tmp > output.txt echo %date% >> output.txt
希望这会帮助别人。
我发现用于创建txt输出文件的批处理脚本使用stdout“>>”创建txt文件与powershell的输出格式ascii,utf8和utf7兼容,所有其他输出格式都会导致文件中出现额外的空格。
如果输出文件是使用powershells stdout“>>”创建的,则从批处理脚本添加到文件的任何stdout都将显示为中文字符。
在我的情况下,解决方法是用批处理脚本重新创建输出文件,它将采用正确的格式,随后的PowerShell添加必须使用“| out-file -encoding ascii / utf8 / utf7”