如何在Windows批处理文件中创建无限循环?


160

这基本上是我想要的批处理文件。我希望每当我按任意键越过“暂停”时都可以重新运行“ Do Stuff”。

while(true){
    Do Stuff
    Pause
}

看起来只有for循环可用,而没有while批量循环。那我如何创建一个无限循环?


4
您是否在询问Windows / DOS批处理文件?
thkala 2011年

是的,很抱歉您含糊不清,我将为OP做附录。
sooprise 2011年

1
+1糟糕,我发帖时没有注意到其他答案!
PA。

您可以使用For Command或者链接
scientist_7

Answers:


289

如何使用good(?)old goto

:loop

echo Ooops

goto loop

另请参阅以获得更有用的示例。


不好:D有时会更快,但永远不会好:D好的,只有一个好的地方去
goto-

我同意jave.web,您应该在下面使用for循环建议。几乎不要在代码中使用goto,即使它是脚本。在80年代的GW Basic日子里,后藤很酷。
DoodleKana 2014年

从cmd提示符?
theonlygusti 2015年

13
我不同意jave.web-如果正确使用goto并没有错。例如,我将使用它来确保在循环中运行的程序由于某种原因而死亡时会自动重生。但是,如果我的程序由于某种原因立即死亡,最好在循环中稍加等待以停止cpu抖动。
约翰·亨特2015年

1
@theonlygusti 不能像您期望的那样作为单行命令运行:lbl & echo Ooops & goto lbl但是@Nicholi在下面的评论中有FOR /L (1,0,2) DO @echo Oops
JimB 2015年

77

在Windows中使用的单行命令中的无限循环cmd

FOR /L %N IN () DO @echo Oops

在此处输入图片说明


7
要在批处理文件中使用该类型,请执行以下操作:FOR / L %% N IN()DO @echo Oops
Phil Roggenbuck

这是一个被低估的答案。谢谢!
var firstName

63

一个真正的无限循环,从1到10计数,增量为0。
您需要无限或更多次递增才能达到10。

for /L %%n in (1,0,10) do (
  echo do stuff
  rem ** can't be leaved with a goto (hangs)
  rem ** can't be stopped with exit /b (hangs)
  rem ** can be stopped with exit
  rem ** can be stopped with a syntax error
  call :stop
)

:stop
call :__stop 2>nul

:__stop
() creates a syntax error, quits the batch

如果您需要一个真正的无限循环,这可能会很有用,因为它比goto :loop版本快得多,因为for循环在启动时会完全缓存一次。


17
很好,因为它也可以在命令提示符下键入它。/ l%n(1,0,2)中的@echo。“ hi guys”
Nicholi 2012年

希望此解决方案有更多解释。
Nelda.techspiress

19

help GOTO

并尝试

:again
do it
goto again

4

另一个更好的方法是:

:LOOP
timeout /T 1 /NOBREAK 
::pause or sleep x seconds also valid
call myLabel
if not ErrorLevel 1 goto :LOOP

这样您也可以解决错误


1

这是使用循环的示例:

echo off
cls

:begin

set /P M=Input text to encode md5, press ENTER to exit: 
if %M%==%M1% goto end

echo.|set /p ="%M%" | openssl md5

set M1=%M%
Goto begin

这是我需要在Windows上将任何消息加密为md5哈希(需要openssl)时使用的简单批处理,并且该程序会忠实地重复自身,除非提供Ctrl + C或空输入。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.