【问题标题】:Issue with batch file encoding批处理文件编码问题
【发布时间】:2013-10-21 20:11:46
【问题描述】:

我正在尝试创建一个批处理文件脚本,以便在我的工作地点的计算机上获取一些非常基本的信息。但是,我在编码方面遇到了严重的问题。 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)了解不多,但我尝试了几个,仍然得到相同的乱码结果。

【问题讨论】:

    标签: batch-file encoding cmd wmic ipconfig


    【解决方案1】:

    Ipconfig 输出为 ANSI,wmic 为 unicode

    如果你在 ipconfig 之前输出 wmic,当读取它时,它被认为是 unicode,因为它是开始或文件。 ipconfig 的输出是垃圾,因为没有双字节字符。

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

    使用 find 过滤并重新编码为 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""
      

      【讨论】:

      • 仍然没有...这需要我用另一个批处理文件启动 CMD,然后在同一个 CMD 窗口中调用我的批处理文件...是否有更内联的解决方案?我可以编写一个 C# 程序来执行此操作,但我不想...
      • 你确定你的批处理文件是用ANSI编码保存的吗?你可以在Notepad > File > Save as查看。
      • 嗯...它仍然在做乱码,无论我将其设置为什么输出...我都尝试了 ANSI 的两个命令,然后将 WMIC 更改为 Unicode...仍然是乱码。 @echo off CMD /U /C wmic bios 获取序列号 >> "C:\%computername%-info.txt" CMD /A /C ipconfig /all >> "C:\%computername%-info.txt"跨度>
      • 你能具体说明乱码对你来说是什么意思吗?真的,我从来没有见过 CMD 写难以辨认的字符,作为最后的手段,试试这个:(For /F "Delims=" %%# in ('wmic bios get serialnumber ^| find /i /v ""') Do (Echo %%#))> "C:\%computername%-info.txt"
      • 回答你的问题,是的,它是ANSI
      【解决方案3】:

      试试

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

      或者为了更好的输出:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2015-05-03
        • 1970-01-01
        • 2021-06-23
        • 2013-11-11
        • 2012-07-23
        相关资源
        最近更新 更多