我在使用cmd.exe时遇到了一些问题,我有时会用它来创建文件并在那里写输出。但如果我试试这个:
wmic logicaldisk get name, freespace >> output.txt
echo %date% >> output.txt
我开始2-3次,得到一个output.txt,如:
FreeSpace Name
17990881280 C:
D:
㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀 一愀洀攀 ഀ㜀㤀㤀 㠀㠀㈀㠀 䌀㨀 ഀ 䐀㨀 ഀ⸸㐰㈮′
这个中文文本看起来很有趣,但我希望看到日期。我想某种程度上编码随日期而改变。因为如果我做回显%date%>> output.txt一切都很好,我得到了约会。我该怎么办,我想获得wmic输出和日期。有任何想法吗?谢谢
答案 0 :(得分:8)
原因是WMIC向UNICODE输出。虽然批处理命令默认输出为ANSI。由于ANSI代码页小于UNICODE并且映射不同,因此在它们之间进行转换会成为问题。有几种方法可以解决这个问题。
一个。使用/ U开关启动命令shell,或者如果已经在命令提示符中,只需键入cmd / U。
“帮助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
希望这会对某人有所帮助。
答案 1 :(得分:7)
WMIC有一些奇怪的输出。我看过一个讨论,据说WMIC使用unicode,但我认为情况比这更复杂。如果我将WMIC输出捕获到文件并使用十六进制编辑器,我会在每行的末尾看到一个额外的回车符。在输入output.txt时,我完全不知道日期内容如何转换成乱码。 (代码页问题?但是如何?)在我的机器上,我得到了日期应该在哪里的问号。
我能够使用
解决问题wmic logicaldisk get name, freespace | more >>output.txt
echo %date%>>output.txt
答案 2 :(得分:1)
我发现用于使用stdout“>>”创建txt输出文件的批处理脚本创建txt文件与powershell的输出格式ascii,utf8和utf7兼容,所有其他输出格式都会导致文件中出现额外的空格。
如果使用powershells stdout“>>”创建输出文件,然后,批处理脚本中对文件的任何标准添加都将显示为中文字符。
我的解决方法是使用批处理脚本重新创建输出文件,它将采用正确的格式,后续的PowerShell添加必须使用“| out-file -encoding ascii / utf8 / utf7”