批处理 - 检查变量是否与列表中的任何项匹配

时间:2017-03-03 17:58:49

标签: batch-file match

我有一个简单的脚本可以抓取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用法。我真的很擅长正则表达式,所以如果它是最好的选择,我需要一些指导。

我如何完成上述工作?

2 个答案:

答案 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.......