Windows cmd以某种方式将中文文本作为输出
我在Windows cmd以某种方式将中文文本作为输出,windows,batch-file,cmd,Windows,Batch File,Cmd,我在cmd.exe方面遇到了一些问题。我有时使用它来创建文件并在那里写入输出。但如果我尝试这样做: wmic logicaldisk get name, freespace >> output.txt echo %date% >> output.txt 我启动它两到三次,就会得到一个output.txt,比如: FreeSpace Name 17990881280 C: D: 㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀 一
cmd.exe
方面遇到了一些问题。我有时使用它来创建文件并在那里写入输出。但如果我尝试这样做:
wmic logicaldisk get name, freespace >> output.txt
echo %date% >> output.txt
我启动它两到三次,就会得到一个output.txt
,比如:
FreeSpace Name
17990881280 C:
D:
㠱〮⸴〲㈱ഠ䘊爀攀攀匀瀀愀挀攀 一愀洀攀 ഀ㜀㤀㤀 㠀㠀㈀㠀 䌀㨀 ഀ 䐀㨀 ഀ⸸㐰㈮′
嗯,那里的中文文本看起来很有趣,但我想看看日期。我想编码会随着日期而改变。一切都很好,如果我单独执行echo%date%>>output.txt
,我就能得到日期
我想获得wmic
输出和日期
我该怎么办?WMIC有一些奇怪的输出。我看过一次讨论,有人说WMIC使用unicode,但我认为情况比这更复杂。如果我将WMIC输出捕获到一个文件并使用十六进制编辑器,我会在每行末尾看到一个额外的回车符。当输入output.txt时,我完全不知道日期内容是如何转换成胡言乱语的。(代码页问题?但如何解决?)在我的机器上,我得到了日期应该在哪里的问号 我可以通过使用
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个输出文件。)
希望这能对其他人有所帮助。我发现用于创建txt输出文件的批处理脚本使用stdout“>>”创建txt文件与powershell的输出格式ascii、utf8和utf7兼容,所有其他输出格式都会导致文件中出现额外的空格 如果输出文件是使用powershells stdout“>>”创建的,则从批处理脚本添加到文件中的任何stdout将显示为中文字符
在我的案例中,解决方法是使用批处理脚本重新创建输出文件,它将采用正确的格式,随后的powershell添加必须使用“| out file-encoding ascii/utf8/utf7”谢谢它的工作。我希望我能理解为什么。编码是否随着
| more
而改变?@sabisai-我也希望我能理解发生了什么。我对根本问题的理解还不足以假设修复程序是如何工作的。好吧^^最重要的是它能工作。如果有人知道为什么答案可以作为注释发布:)@sabisabi-MORE本身可以准确地将unicode转换为ansi,但是WMIC似乎在其输出通过管道传输时内置了一些有缺陷的转换。因此,在更多人获得WMIC输出之前,WMIC输出已被“转换”。正常WMIC输出是正常的unicode。管道输出转换为ansi,除了在每行末尾有一个额外的回车,并且在输出末尾有一个额外的新行(带有额外的回车)。基于大量的实验,WMIC似乎自己做这件事,但只有当输出通过管道传输时。不涉及WMIC的管道不会更改输出。我的上一条语句不太正确-如果最后一个字节不是
,管道将在输入的末尾追加
。除此之外,它们不会改变输出。
wmic /OUTPUT:output.tmp logicaldisk get name, freespace
TYPE output.tmp > output.txt
echo %date% >> output.txt