3

我正在创建的批处理文件中有一个简单的 FOR 循环,但它的工作方式与我期望的不太一样。FOR 循环遍历文本文件的行,在每次迭代中,我使用 IF 语句对当前行进行快速比较,如果结果为真,则做一些工作。这是代码:

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 语句似乎将该值视为纯文本!我已将 ENABLEDELAYEDEXPANSION 设置为处理循环内的变量,但不确定下一步该做什么。任何帮助表示赞赏!

4

2 回答 2

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 也不行,这是为了提示)

于 2012-05-04T20:06:42.983 回答
0

可能错误在这一行

IF %sitecounts% == %input% (set /a selectedsitepath=%logfilepath%W3SVC%%H)

您正在设置字符串而不是数字表达式(set /a),然后更改为

IF !sitecounts! == %input% (set   selectedsitepath=%logfilepath%W3SVC%%H)
   ^          ^                 ^
于 2012-05-04T20:39:23.703 回答