我有一个简单的脚本可以抓取PC的制造商并设置一个变量:
for /f "usebackq tokens=2 delims==" %%A IN (`wmic csproduct get vendor /value`) DO SET VENDOR=%%A
接下来我需要做的是检查我的新VENDOR
变量是否与列表中的任何内容匹配:
Acer
Gateway
Packard
Alienware
ASUS
Dell Inc.
Fujitsu
HP
Compaq
Lenovo
IBM
Samsung
Sony
Toshiba
然后找到DO COMMAND1
,如果找不到则DOCOMMANDB
。
我认为将变量汇总到findstr
可能会有效,但是当您向其提供文本文件时,我只知道findstr
用法。我真的很擅长正则表达式,所以如果它是最好的选择,我需要一些指导。
我如何完成上述工作?
答案 0 :(得分:2)
如果您将供应商移至findstr /I /G:Vendorlist.txt
并使用条件执行&&
表示成功,||
表示失败:
@Echo off
for /f "tokens=2 delims==" %%A IN (
'wmic csproduct get VENDOR /value'
) DO Set VENDOR=%%A
Echo:%VENDOR%|Findstr /I /G:VENDORList.txt >NUL 2>&1 &&(
Echo found %VENDOR% in List
)||(
Echo %VENDOR% not found in list
)
答案 1 :(得分:2)
略有不同的方法。您还可以将所有供应商放入列表中,并使用FOR / F读取列表。
@echo off
for /f "usebackq tokens=2 delims==" %%A IN (`wmic csproduct get vendor /value`) DO SET VENDOR=%%A
FOR %%G IN ("Acer"
"Gateway"
"Packard"
"Alienware"
"ASUS"
"Dell Inc."
"Fujitsu"
"HP"
"Compaq"
"Lenovo"
"IBM"
"Samsung"
"Sony"
"Toshiba") DO (
IF /I "%vendor%"=="%%~G" GOTO MATCH
)
:NOMATCH
echo Does not match
pause
GOTO :EOF
:MATCH
echo Does match
pause
GOTO :EOF
如果您想阅读每个条目都在其自己的行上的列表。
FOR /F "usebackq delims=" %%G IN ("filelist.txt") DO IF.......