扩展变量不被接受为条件?

时间:2018-03-05 01:03:07

标签: windows batch-file

此代码的目标是解析一个简单的文本文件,并检查每一行的第一个单词是否与测试变量匹配。

setlocal enabledelayedexpansion

set testvar=pc3
for /f "tokens=*" %%a in (input.txt) do (
    for /f "tokens=1-2 delims= " %%G in ("%%a") do set pc=%%G&set vers=%%H&echo "%testvar%"&echo "!pc!"
    if "!pc!" == "testvar" (echo Yes) ELSE (echo no)
)
pause

在这种情况下,input.txt如下:

pc1 ver1
pc2 ver1
pc3 ver2

输出总是"没有"

任何人都知道我错过了什么?

1 个答案:

答案 0 :(得分:3)

两件事。

首先,pcvers将依次设置为每个输入行的值,但if测试只会在for...%%G...完成后完成读取每一行,所以它将在最后一行 上完成,这是最后一次设置变量。

如果您打算在每个输入行上执行if测试(您没有说...),那么测试需要包含在do

for /f "tokens=1-2 delims= " %%G in ("%%a") do (set pc=%%G&set vers=%%H&echo "%testvar%"&echo "!pc!"
if "!pc!" == "testvar" (echo Yes) ELSE (echo no)
)

第二个问题是if测试会将pc中的当前值与文字 testvar进行比较。毫无疑问,你打算它应该与testvar

内容进行比较
if "!pc!" == "%testvar%" (echo Yes) ELSE (echo no)