批处理文件编码问题

时间:2013-10-21 20:11:47

标签: batch-file encoding cmd wmic ipconfig

我有一个批处理文件脚本我正在尝试创建,以便在我的工作现场的计算机上获取一些非常基本的信息。但是,我遇到了严重的编码问题。 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

结果......很奇怪。我不知道每个工具的编码输出是什么,我还有更多要添加...有没有人知道修复?我不太了解codepages(chcp)但是我已经尝试了几个并且仍然得到相同的乱码结果。

3 个答案:

答案 0 :(得分:4)

Ipconfig输出是ANSI,wmic是unicode

如果在ipconfig之前输出wmic,则在readed时它被视为unicode,因为它是开头或文件。并且ipconfig的输出是垃圾,因为没有双字节字符。

如果在wmic之前使用ipconfig,则将文件视为ansi,将wmic的输出视为空格分隔

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

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

所以所有命令输出都是ansi

答案 1 :(得分:2)

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

尝试将CMD的输出编码设置为ANSI

CMD /A /C "Your command here"

  

Cmd /?帮助:

     

/ A输出ANSI字符


然后试试这个:

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

答案 2 :(得分:0)

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

或更好的输出:

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

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