5

我有一些麻烦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输出和日期。

我该怎么办?

4

3 回答 3

8

原因是 WMIC 输出到 UNICODE。而批处理命令默认输出为 ANSI。由于 ANSI 代码页小于 UNICODE 并且映射方式不同,因此它们之间的转换成为一个问题。有几种方法可以解决这个问题。

A. 使用 /U 开关启动命令外壳,或者如果已经在命令提示符中,只需键入 cmd /U。

来自“Help 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

希望这会对某人有所帮助。

于 2013-02-22T12:53:24.553 回答
7

WMIC 有一些奇怪的输出。我看过一个讨论,说 WMIC 使用 unicode,但我认为情况比这更复杂。如果我将 WMIC 输出捕获到文件并使用十六进制编辑器,我会在每行的末尾看到一个额外的回车符。我完全不知道在输入 output.txt 时如何将日期内容转换为乱码。(代码页问题?但如何?)在我的机器上,日期应该在哪里出现问号。

我能够通过使用解决问题

wmic logicaldisk get name, freespace | more >>output.txt
echo %date%>>output.txt 
于 2012-04-18T14:30:48.567 回答
1

我发现用于创建 txt 输出文件的批处理脚本使用 stdout ">>" 创建 txt 文件与 powershell 的输出格式 ascii、utf8 和 utf7 兼容,所有其他输出格式导致在文件中看到额外的空格。

如果输出文件是使用 powershells stdout ">>" 创建的,那么从批处理脚本添加到文件的任何 stdout 都将显示为中文字符。

在我的情况下,解决方法是使用批处理脚本重新创建输出文件,它将采用正确的格式,并且后续的 powershell 添加必须使用“| out-file -encoding ascii/utf8/utf7”

于 2017-05-12T07:11:06.623 回答