cmd以某种方式将中文文本作为输出

时间:2012-04-18 13:36:23

标签: windows shell batch-file cmd

我在使用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输出和日期。有任何想法吗?谢谢

3 个答案:

答案 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”