【问题标题】:How do I loop a batch script only a certain amount of times?如何仅循环批处理脚本一定次数?
【发布时间】:2013-10-08 21:26:15
【问题描述】:

如何将批处理脚本仅循环一定次数(x10 或其他)? 如果代码是:

@echo off                                                                     
:loop1                                                                              
Start taskmgr.exe                                                       
Goto loop                                                                         
:loop2                                                                             
Start cmd.exe                                                                 
goto loop2     

如何循环loop1和几次然后转到loop2?

任何有用的答案将不胜感激:)

【问题讨论】:

标签: loops batch-file echo


【解决方案1】:

如果您打开命令窗口并输入 FOR /?它会给你你正在寻找的命令。

FOR /L %variable IN (start,step,end) DO command [command-parameters]

The set is a sequence of numbers from start to end, by step amount.
So (1,1,5) would generate the sequence 1 2 3 4 5 and (5,-1,1) would
generate the sequence (5 4 3 2 1)

【讨论】:

    【解决方案2】:

    由于我忽略的原因,FOR 命令不适用于循环特定标签。 例如(我可能错了):

    @echo off
    for /L %%a in (1,1,2) do (
    goto loop
    )
    
    :loop
    echo this won't loop for 2 times.
    

    这只会无限循环。因此,我找到了一种替代的简单方法,可以根据需要循环标签多次。为此,我创建了一个变量,例如 loop,每次标签重复时都会有一个更大的数字。

    有一个例子:

    @echo off
    set loop=0
    :loop
    echo hello world
    set /a loop=%loop%+1 
    if "%loop%"=="2" goto next
    goto loop
    
    :next
    echo This text will appear after repeating "hello world" for 2 times.
    

    输出:

    hello world
    hello world
    This text will appear after repeating "hello world" for 2 times.
    

    解释:

    • set loop=0 将变量loop 的值设置为0;
    • 每次重复标签 :loop 时,set /a loop=%loop%+1 加 1。
    • if "%loop%"=="2" goto next 测试变量loop 是否等于2(因此重复了2次);如果相等,则转到标签:next,否则转到标签:loop

    【讨论】:

    • 在您的第一个代码片段中,将goto loop 替换为call :loop(注意:: 对于goto 是可选的,但call 需要它)并且它会起作用。
    【解决方案3】:

    这是一个例子:

    @echo off                                                                     
    for /L %%a in (1,1,10) do (
    Start taskmgr.exe          
    )                                             
    
    for /L %%a in (1,1,10) do (                                                        
    Start cmd.exe                                                                 
    )
    

    【讨论】:

      【解决方案4】:
      @echo off
      set /a a=1
      goto loop
      :loop
      echo looped %a% times so far
      set /a a=%a%+1
      if %a%=10 (
      echo looped a total of %a% times
      )
      

      你也可以使用这个命令:

      @echo off
      for /l %%a in (1,1,10) do (
      rem %%a is a variable and starts at a value of 1, steps by 1 and ends at a value of 10
      start "Command Prompt #%%a Opened" cmd
      rem eg Command Prompt #1 Opened
      rem eg Command Prompt #2 Opened
      rem etc
      )
      

      打开标题为“命令提示符#%%a 已打开”的命令提示符。 rem 是一个可以用来写comments 的命令。

      【讨论】:

      • 这两种方法都是几年前提出的。您的回答如何增加附加值?
      • 我只是使用我的一些批处理文件中的一个示例。
      • @Stephan 没有这样的例子 for 和循环变量引用
      【解决方案5】:

      试试这个:

      @echo off
      set loopvar=1
      :repeat
      if %loopvar% gtr 5 (goto :done) else (set /a loopvar=%loopvar%+1 && echo Loop && goto :repeat)
      :done
      

      在 :done 下,编写您希望它在循环后执行的代码。确保将五个替换为您希望循环重复的次数。 对于循环中的延迟,试试这个:

      @echo off
      set loopvar=1
      :repeatwithdelay
      if %loopvar% gtr 5 (goto :done) else (set /a loopvar=%loopvar%+1 && timeout /T 1 >nul && echo Loop && goto :repeatwithdelay)
      

      希望对您有所帮助!

      【讨论】:

        猜你喜欢
        • 2011-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 2020-12-14
        • 1970-01-01
        相关资源
        最近更新 更多