从文本字符串中删除“等于”符号

时间:2010-09-23 09:45:29

标签: batch-file

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

  

For / F“tokens = *”%% b in('wmic / node:%device%computersystem get Model / value ^ | find“Model”')do set model = %% b

     

FOR / F“tokens = *”%% c in('wmic / node:%device%bios GET serialnumber / value ^ | find“SerialNumber =”')do set serialnumber = %% c

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

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

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

  

set SerialNumber =!serialnumber:SerialNumber =!

但这会在行的开头留下一个等号。所以最终的输出是= CNUBFZXXY,我想要做的是删除前导=,而我无法做到。

任何建议?

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

下面的代码段将允许您删除第一个和最后一个字符。我在这里玩了一个技巧,并在字符串的末尾添加了一个匹配的'='(注意:我可以使用任何字符)。我找不到一种方法来达到最后一个字符,所以诀窍就是在变量末尾添加任何字符,然后用1,-1剥离它,这意味着跳过第一个字符和负数右边的价值意味着“从右边算回”。

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

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

答案 3 :(得分:0)

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

语法       %变量:〜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

答案 4 :(得分:0)

只需这样做就可以了。在IF声明中使用围绕变量和字符串的引号标记

  

IF“%VARIABLE%”==“equalsign = 123456”goto Z

     

位:Z

     

SET VARIABLE =%VARIABLE:~10%

     

echo%VARIABLE%

输出应为123456.无等号。

应该这样做。说真的,这真的让我疯狂地试图解决这个问题。最近有人帮助了我。没想到会那么容易大声笑。