Windows 不接受扩展变量作为条件?

Windows 不接受扩展变量作为条件?,windows,batch-file,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!"

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

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
输出总是“否”

有人知道我错过了什么吗?

两件事

首先,
pc
vers
将依次设置为每个输入行的值,但是,
if
测试将只在……%%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)

该死,第二个是个可笑的错误。谢谢你的帮助和澄清!