我在我正在创建的批处理文件中有一个简单的FOR循环,它的工作方式与我期望的方式不同。 FOR循环遍历文本文件的行,并且在每次迭代时,我使用IF语句对当前行进行快速比较,如果计算结果为true,则执行一些工作。这是代码:
SETLOCAL ENABLEDELAYEDEXPANSION
set /a sitecounts=1
set /a input=34
FOR /F "tokens=1,2 delims=^/" %%G IN (file.txt) DO (
IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H)
set /a sitecounts=!sitecounts!+1
echo !sitecounts!
)
我遇到了一个奇怪的问题, sitecounts 变量(我的计数器)实际上每个循环正确递增(我通过用最后一个语句回显计数来证明这一点) - 但是在下一次迭代时,%sitecounts%仍然显示它的值为'1',这是初始值。
如果我将代码更改为:
IF !sitecounts! == ...
...然后IF语句似乎将该值视为纯TEXT!我已经设置ENABLEDELAYEDEXPANSION来处理循环中的变量,但不知道下一步该做什么。任何帮助表示赞赏!
答案 0 :(得分:2)
这次我实际测试了它......
更改行
IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H)
进入
IF !sitecounts! == %input% (set selectedsitepath=%logfilepath%W3SVC%%H)
%sitecounts%
需要!sitecounts!
才能进行评估 set /a selectedsitepath=%logfilepath%W3SVC%%H
不起作用,因为它不是数字表达式:
/ A开关指定等号右侧的字符串 是一个被评估的数值表达式。
只是忽略开关(/p
不会起作用,这是一个提示)
答案 1 :(得分:0)
错误可能就在这一行
IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H)
您正在设置字符串而不是数字表达式(设置/ a),然后更改为
IF !sitecounts! == %input% (set selectedsitepath=%logfilepath%W3SVC%%H)
^ ^ ^