【问题标题】:Remove an 'Equals' symbol from text string从文本字符串中删除“等号”符号
【发布时间】:2010-09-23 09:45:28
【问题描述】:

我正在对一系列远程客户端计算机运行 WMIC 查找,获取型号和序列号。

For /F "tokens=*" %%b in ('wmic /node:%device% computersystem get Model /value^|find "Model"') 做 Set model=%%b

FOR /F "tokens=*" %%c in ('wmic /node:%device% bios GET serialnumber /value^|find "SerialNumber=" ') 设置 Serialnumber=%%c

我遇到的问题是(例如)%serialnumber% 设置为:SerialNumber=CNU8424GP3

我不想要“Serialnumber=”,我只想要序列号本身。

我发现剥离它的唯一方法是:

设置 SerialNumber=!serialnumber:SerialNumber=!

但这会在行首留下一个等号。所以最后的输出是=CNUBFZXXY,我想做的就是去掉前面的=,一直没能。

有什么建议吗?

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    delims== 添加到您的for 语句并将tokens=* 更改为tokens=1-2。然后,您想要的值将在第二个 for 循环变量中:

    For /F "delims== tokens=1-2" %%b in ('wmic /node:%device% computersystem get Model /value^|find "Model"') do set model=%%c
    For /F "delims== tokens=1-2" %%c in ('wmic /node:%device% bios GET serialnumber /value^|find "SerialNumber=" ') do set Serialnumber=%%d
    

    【讨论】:

    • 谢谢,我可以看到你想在这里得到什么,但是你上面给出的确切例子是从 >before
    • %device% 在您的系统上有什么价值?我的系统上没有这个 var,所以我使用 localhost 代替 %device% 并且这段代码有效。我得到%model% 的“Latitude E6400”和%SerialNumber% 的正确值。您是否捕获了上面的所有文本,甚至是向右滚动的文本? set 语句应分别使用 %%c%%d
    • %device% 是从其他地方读入的,并且是联网机器的主机名,因为我正在针对远程设备列表运行它。
    • 有趣的是,我刚刚在我自己的机器上运行了这个,正如你所说,它运行良好。奇怪的。我想知道我是否可以用 PSExec 来代替。感谢您的帮助:)
    • 远程机器的 wmic 输出与本地机器的输出是否不同?您可能必须使用代币才能获得所需的东西。从概念上讲,我的解决方案应该可以工作,只需解析输出,这样您就可以获取所需的内容。
    【解决方案2】:

    要么使用带有"delims=="(已回答)的 for 语句拆分结果,要么修剪到并包括等号 - 您的示例代码已经非常接近:

    set SerialNumber=!SerialNumber:SerialNumber=!
    set SerialNumber=!SerialNumber:~1!
    

    【讨论】:

      【解决方案3】:

      下面的 sn-p 将允许您删除第一个和最后一个字符。我在这里玩了一个技巧,并在字符串末尾添加了一个匹配的“=”(注意:我可以使用任何字符)。我找不到找到最后一个字符的方法,所以诀窍是在变量末尾添加任何字符,然后用 1,-1 剥离它,这意味着跳过第一个字符和否定右侧的值表示“从右侧倒数”。

      set serialnumber=%serialnumber%=
      set serialnumber=%serialnumber:1-1%
      

      希望这可以帮助那些希望在未来破解 DOS 批处理脚本的人。可以在此处找到对字符串操作的简短描述: DOS String Manipulation

      【讨论】:

        【解决方案4】:

        可以从字符串变量中检索特定字符。

        语法 %变量:~num_chars_to_skip% %变量:~num_chars_to_skip,num_chars_to_keep%

        这可以包括负数:

          %variable:~num_chars_to_skip, -num_chars_to_skip%
          %variable:~-num_chars_to_skip,num_chars_to_keep%
        

        例子

         SET _test=012345
         SET _result=%_test:~1,6%
         ECHO %_result%          =12345
        

        【讨论】:

          【解决方案5】:

          只需这样做,它会容易得多。在 IF 语句的 VARIABLE 和 STRING 周围使用引号

          如果 "%VARIABLE%"=="equalsign=123456" 转到 Z

          :Z

          设置变量=%VARIABLE:~10%

          回显 %VARIABLE%

          输出应该是 123456。没有等号。

          应该这样做。说真的,这真的让我想弄清楚这一点。最近有人帮我解决了这个问题。没想到这么简单哈哈。

          【讨论】:

            猜你喜欢
            • 2016-11-22
            • 2014-03-29
            • 2017-03-19
            • 1970-01-01
            • 2017-08-23
            • 2013-05-19
            • 2012-06-25
            • 2017-11-10
            • 2012-02-19
            相关资源
            最近更新 更多