如何在批处理脚本中只循环指定次数?

8

如何让批处理脚本循环执行一定次数(比如10次)? 如果代码如下:

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

如何使循环loop1执行几次后跳转到loop2?
任何有帮助的答案都将不胜感激 :)

5个回答

9

由于我不清楚的原因,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;
  • set /a loop=%loop%+1 每次重复标签 :loop 时,将其加 1。
  • if "%loop%"=="2" goto next 测试变量 loop 是否等于 2(即已重复了 2 次);如果相等,它将转到标签 :next,否则它将转到标签 :loop

在你的第一个代码片段中,将 goto loop 替换为 call :loop(注意:对于 goto 来说,: 是可选的,但是 call 需要它),然后它就可以工作了。 - Stephan

7
如果您打开一个命令窗口并输入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)

5
这是一个例子:
@echo off                                                                     
for /L %%a in (1,1,10) do (
Start taskmgr.exe          
)                                             

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

2
@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
)

这段文字的意思是:“它打开一个标题为“Command Prompt #%%a Opened”的命令提示符窗口。rem 是一条命令,你可以用它来写 注释。”

1
这两种方法几年前就被建议过了。你的答案如何增加额外的价值? - Stephan
我只是举例说明我的一些批处理文件。 - user11655794
@Stephan,目前还没有使用for和循环变量引用的示例。 - Ilya Serbis

0

试试这个:

@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)

希望它有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接