2013-10-21 207 views
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

IPCONFIG输出为ANSI,WMIC是unicode

如果IPCONFIG,然后输出WMIC,当被考虑时它被认为是unicode,因为它的开始或文件就是它。因为没有双字节字符,所以ipconfig的输出是垃圾。

如果IPCONFIG是WMIC之前使用,文件被认为是ANSI和WMIC的输出是空间分隔的

使用发现过滤和重新编码为ANSI

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

因此,所有命令的输出是ANSI

2

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

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

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"" 
+0

仍然没有...这需要我有用另一个批处理文件启动CMD,然后在同一个CMD窗口中调用MY批处理文件...是否有更多的内联解决方案?我可以编写一个C#程序来做到这一点,但宁愿不... –

+0

你确定你的批处理文件是用ANSI编码保存的,你可以在记事本>文件>另存为中检查它。 – ElektroStudios

+0

嗯...它仍然在做乱码的事情,无论我把它设置为...我尝试ANSI的两个命令,然后将WMIC更改为Unicode ...仍然是乱码。 @echo off CMD/U/C wmic BIOS获取serialnumber >>“C:\%计算机名称% - 信息。txt" CMD /A /C ipconfig /all >> "C:\%computername%-info.txt" –

0

尝试

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

或更好的输出:

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

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