2

我有一个我正在尝试创建的批处理文件脚本,以便在我的工作现场的计算机上获取一些非常基本的信息。但是,我在编码方面遇到了严重的问题。WMIC 和 IPCONFIG 提供了不同的编码,因此,它导致我在执行命令时获得乱码结果。到目前为止,我有:

@echo off

if exist "C:\%computername%-info.txt" (
    echo Your computer information is already published! Skipping
) else (

    ipconfig /all > "C:\%computername%-info.txt" 
    wmic bios get serialnumber >> "C:\%computername%-info.txt"
)

pause

结果……很奇怪。我不知道这些工具中的每一个的编码输出是什么,我还有更多要添加的......有人知道修复吗?我对代码页(chcp)了解不多,但我尝试了几个,但仍然得到相同的乱码结果。

4

3 回答 3

4

ipconfig 输出是 ANSI,wmic 是 unicode

如果您在 ipconfig 之前输出 wmic,则在读取时将其视为 unicode,因为开始或文件就是它。ipconfig 的输出是垃圾,因为没有双字节字符。

如果 ipconfig 在 wmic 之前使用,文件被认为是 ansi 并且 wmic 的输出是空格分隔的

使用 find 过滤并重新编码为 ansi

wmic bios get serialnumber | find /v "" >> "C:\%computername%-info.txt"

所以所有的命令输出都是ansi

于 2013-10-21T20:29:39.447 回答
2

WMIC输出编码是Unicode,我不知道是否Ipconfig使用相同的编码。

尝试将输出编码设置CMDANSI

CMD /A /C "Your command here"

命令 /? 帮助:

/A 输出 ANSI 字符


然后试试这个:

CMD /A /C "ipconfig /all > "C:\%computername%-info.txt""
CMD /A /C "wmic bios get serialnumber >> "C:\%computername%-info.txt""
于 2013-10-21T20:14:28.417 回答
0

尝试

wmic /append:"%computername%-info.txt" bios get serialnumber 

或更好的输出:

wmic /append:"%computername%-info.txt" bios get serialnumber /value

没有垃圾(但有一些空行,MC_ND 的解决方案没有) 不过,您可以将其添加/value到他的解决方案中

于 2013-10-22T07:05:56.677 回答