CMD以某种方式书写中国文字输出CMD以某种方式书写中国文字输出(cmd is somehow wr

2019-05-13 13:29发布

我有一些麻烦的cmd.exe,我用它有时创建文件和写有输出。 但如果我尝试这样的:

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

我开始它的2-3倍,我得到像output.txt的:

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

嗯,这中国的文字有看起来很滑稽,但我想看到的日期。 我觉得莫名其妙的编码与更改日期。 因为如果我这样做呼应%日期%>> output.txt的单独一切都很好,我得到的日期。 我应该怎么做,我想获得WMIC输出和日期。 有任何想法吗? 谢谢

Answer 1:

WMIC有一些奇怪的输出。 我见过的讨论,其中有人说WMIC使用Unicode,但我认为情况比这要复杂得多。 如果我捕捉WMIC输出到文件中,并使用十六进制编辑器,我看到在每行的最后一个额外的回车。 我手足无措,不知如何当output.txt中键入日期的内容被转换成乱码是完全。 (代码页问题?但如何?)在我的机器,我得到问号其中的日期应该是。

我能够通过使用来解决这个问题

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


Answer 2:

其原因是,WMIC输出到UNICODE。 尽管批量默认命令输出到ANSI。 由于ANSI代码页比UNICODE小,映射不同,它们之间的转换成为问题。 有几种方法来解决这个问题。

A.与/ U开关启动命令外壳,或者如果已经在命令提示,只需要输入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 

希望这会帮助别人。



Answer 3:

我发现一个批处理脚本中使用使用标准输出“>>”创建txt文件是PowerShell的输出格式的ASCII,UTF8和UTF7兼容,所有其他输出格式导致文件中看到多余的空格创建一个txt输出文件。

如果输出文件与powershells标准输出“>>”创建那么任何标准输出增加,从一个批处理脚本的文件将显示为中国文字。

在我的情况的解决方法是重新创建一个批处理脚本输出文件,这将是正确的格式,并随后PowerShell的增加必须使用“|出文件 - 编码ASCII / UTF8 / UTF7”



文章来源: cmd is somehow writing chinese text as output