计数器不会在Windows批处理文件中的FOR循环内使用IF语句递增

时间:2012-05-04 17:55:55

标签: windows scripting batch-file

我在我正在创建的批处理文件中有一个简单的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来处理循环中的变量,但不知道下一步该做什么。任何帮助表示赞赏!

2 个答案:

答案 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)
   ^          ^                 ^