如何使用For循环查询

时间:2014-12-30 15:46:54

标签: batch-file

批处理脚本中for循环的语法如下:

例如我想做x = 6次

的事情
for /l %%a in (1 ,1, 6)

其中1,1,6表示:

  • start = 1
  • 每步增量= 1
  • end = 6

现在,我想知道:

  1. 这里的起点是否意味着索引,我也能保持0吗?

  2. 如果我执行以下操作:

    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
    
  3. 上面的代码不起作用,但如果我在上面代码的第一行设置counter=1,它就可以正常工作。

    那么,这是否意味着我需要始终从1开始我的计数器?我不能从0开始吗?

3 个答案:

答案 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必须等于或小于此结束才能工作,否则循环永远不会迭代)。)