Windows 배치 파일에서 무한 루프를 만드는 방법은 무엇입니까?


160

이것은 기본적으로 배치 파일에서 원하는 것입니다. 아무 키나 눌러 "일시 정지"를 지날 때마다 "Do Stuff"를 다시 실행할 수 있기를 원합니다.

while(true){
    Do Stuff
    Pause
}

for사용 가능한 루프 만 while있고 배치에 루프가 없는 것 같습니다 . 무한 루프를 만들려면 어떻게해야합니까?


4
Windows / DOS 배치 파일에 대해 질문하고 있습니까?
thkala

예, 모호해서 죄송합니다. OP에 대한 부록을 만들겠습니다.
sooprise

1
+1 ooops, 나는 다른 답변을 눈치 채지 않고 게시했습니다!
PA.

할 수 있습니다 사용 For Command또는 링크
scientist_7

답변:


289

good (?) old를 사용하는 것은 goto어떻습니까?

:loop

echo Ooops

goto loop

더 유용한 예 는 내용도 참조하십시오 .


좋지 않다 : D 때로는 빠르지 만 결코 좋은 것 : D 좋아. 가장 낮은 프로그래밍 장소에는 고토가 좋은 곳이 하나 뿐이다. x)
jave.web

jave.web에 동의합니다. 아래 for 루프 제안을 사용해야합니다. 스크립팅이라도 코드에서 goto를 거의 사용하지 않아야합니다. Goto는 80 년대 GW 기본 시절에 시원했습니다.
DoodleKana

그리고 cmd 프롬프트에서?
theonlygusti

13
jave.web에 동의하지 않습니다. 올바르게 사용하면 goto에 아무런 문제가 없습니다. 예를 들어, 루프 내에서 실행되는 프로그램이 어떤 이유로 죽으면 자동으로 생성되도록하기 위해 사용하려고합니다. 그러나 내 프로그램이 어떤 이유로 든 즉시 죽는 경우 CPU 스 래싱을 멈추기 위해 루프에 약간의 대기를 두는 것이 좋습니다.
존 헌트

1
@theonlygusti 예상대로 한 줄 명령으로 작동하지 않습니다:lbl & echo Ooops & goto lbl . 그러나 @Nicholi의 의견은 다음과 같습니다 :FOR /L (1,0,2) DO @echo Oops
JimB

77

Windows 에서 사용하기위한 한 줄 명령의 무제한 루프 cmd:

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

여기에 이미지 설명을 입력하십시오


7
배치 파일 형식으로 사용하려면 : FOR / L %% N IN () DO @echo Oops
Phil Roggenbuck

이것은 저평가 답변입니다. 감사합니다!
var firstName

63

0의 증분으로 1에서 10까지 계산되는 무한 루프
입니다. 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 :loopfor-loop는 시작할 때 완전히 한 번 캐시되므로 버전 보다 훨씬 빠르기 때문에 실제로 무한 루프가 필요한 경우 유용 할 수 있습니다 .


17
명령 프롬프트에서 입력하는 것만으로도 좋습니다. (1,0,2)의 / L % n은 @echo. "hi guys"
Nicholi

이 솔루션에 약간 더 자세한 설명이 있기를 바랍니다.
Nelda.는 19시


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 또는 빈 입력을 제외하고 프로그램은 충성스럽게 반복됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.