批处理脚本中for循环的语法如下:
例如我想做x = 6次
的事情for /l %%a in (1 ,1, 6)
其中1,1,6表示:
现在,我想知道:
这里的起点是否意味着索引,我也能保持0吗?
如果我执行以下操作:
set counter=0
for /l %%a in (0 ,%counter% , 6) do (
GOTO CASE_%counter%
:CASE_0
// body
:CASE_1
// body
.....
:CASE_6
//body
GOTO END_SWITCH
:END_SWITCH
set /A counter=%counter%+1
if %counter% LEQ 6 (
GOTO CASE_%counter%
)
)
pause
上面的代码不起作用,但如果我在上面代码的第一行设置counter=1
,它就可以正常工作。
那么,这是否意味着我需要始终从1开始我的计数器?我不能从0开始吗?
答案 0 :(得分:1)
你的循环不起作用的原因是因为你有Counter=0
并且正在使用它作为增量。所以每次循环时,它都会增加0;因此它将永远运行。
更改Counter=1
将运行0..6
(总共7次),每次递增1次。
您可能需要查看循环中的一些错误。你正在循环中递增counter
- 我不认为这是你想做的事情。 %%a
将是从您定义的最小/最大值开始递增的变量,FOR
构造将为您处理此问题。
建议代码:
set counter=1
for /l %%a in (0 ,%counter% , 6) do (
if "%%a"=="0" (
[do stuff]
)
if "%%a"=="1" (
[do stuff]
)
...
)
答案 1 :(得分:0)
在你的例子中,你告诉程序以0为增量递增,这就是为什么它不起作用。
从索引0开始没有问题。然而0的计数器将不起作用。
答案 2 :(得分:0)
问题的真正根本原因是在goto
内使用for
这是不可能的; goto
打破了for
循环上下文,因此只要执行for
,命令解释程序的行为就像for
正文中的命令在goto
之外一样
作为解决方法,您可以将for
正文的所有代码放在子例程中(让我们称之为:SUB_SWITCH
),并将call :SUB_SWITCH
放入for
身体是唯一的命令。
您可以在this post中找到类似的问题。
回答您的主要问题:
是的,您可以从0
或任何其他(整数)值开始,甚至是负值。
(您甚至可以将增量设置为0
以设置无限循环(但是,start必须等于或小于此结束才能工作,否则循环永远不会迭代)。)