我有一个批处理文件脚本我正在尝试创建,以便在我的工作现场的计算机上获取一些非常基本的信息。但是,我遇到了严重的编码问题。 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)但是我已经尝试了几个并且仍然得到相同的乱码结果。
答案 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
添加到他的解决方案