Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows cmd以某种方式将中文文本作为输出_Windows_Batch File_Cmd - Fatal编程技术网

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