我正在对一系列远程客户端计算机运行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,我想要做的是删除前导=,而我无法做到。
任何建议?
答案 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.无等号。
应该这样做。说真的,这真的让我疯狂地试图解决这个问题。最近有人帮助了我。没想到会那么容易大声笑。