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.