Làm cách nào để tạo một vòng lặp vô hạn trong tệp bó Windows?


160

Đây là cơ bản những gì tôi muốn trong một tập tin bó. Tôi muốn có thể chạy lại "Do Stuff" bất cứ khi nào tôi nhấn bất kỳ phím nào để đi qua "Tạm dừng".

while(true){
    Do Stuff
    Pause
}

Hình như chỉ có forcác vòng lặp có sẵn và không có whilevòng lặp theo đợt. Làm thế nào để tôi tạo một vòng lặp vô hạn sau đó?


4
Bạn đang hỏi về một tệp bó Windows / DOS?
thkala

Vâng, xin lỗi vì mơ hồ, tôi sẽ làm phụ lục cho OP.
soopawn

1
1 ooops, tôi đã đăng mà không nhận thấy câu trả lời khác!
PA.

Bạn có thể sử dụng For Commandhoặc liên kết
nhà khoa

Câu trả lời:


289

Làm thế nào về việc sử dụng tốt (?) Cũ goto?

:loop

echo Ooops

goto loop

Xem thêm điều này cho một ví dụ hữu ích hơn.


không tốt: D đôi khi nhanh hơn nhưng không bao giờ tốt: D ok chỉ có một nơi tốt cho goto - trong chương trình thấp nhất x)
jave.web

Tôi đồng ý với jave.web, bạn nên sử dụng gợi ý vòng lặp for bên dưới. Bạn gần như không bao giờ nên sử dụng goto trong mã của mình ngay cả khi nó đang được script. Goto đã trở lại mát mẻ trong những ngày cơ bản của GW trong những năm 80.
DoodleKana

Và từ dấu nhắc cmd?
theonlygusti 13/03/2015

13
Tôi không đồng ý với jave.web - không có gì sai với goto nếu bạn sử dụng đúng cách. Ví dụ, tôi sắp sử dụng nó để đảm bảo chương trình được chạy trong vòng lặp tự động hồi sinh nếu nó chết vì bất kỳ lý do gì. Tuy nhiên, có thể là khôn ngoan khi đặt một sự chờ đợi nhỏ trong vòng lặp để dừng việc đập cpu nếu chương trình của tôi chết ngay lập tức vì một số lý do.
John Hunt

1
@theonlygusti Không hoạt động như một lệnh một dòng, như bạn mong đợi :lbl & echo Ooops & goto lbl; nhưng bình luận của @Nicholi bên dưới không :FOR /L (1,0,2) DO @echo Oops
JimB

77

Vòng lặp không giới hạn trong lệnh một dòng để sử dụng trong cmdwindows:

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

nhập mô tả hình ảnh ở đây


7
Để sử dụng tệp đó trong một loại tệp bó: FOR / L %% N IN () DO @echo Oops
Phil Roggenbuck

Đây là một câu trả lời đánh giá thấp. Cảm ơn bạn!
var FirstName

63

Một vòng lặp thực sự vô hạn, đếm từ 1 đến 10 với số gia bằng 0.
Bạn cần số gia vô hạn hoặc nhiều hơn để đạt được số 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

Điều này có thể hữu ích nếu bạn cần một vòng lặp thực sự vô hạn, vì nó nhanh hơn nhiều so với goto :loopphiên bản vì vòng lặp for được lưu trữ hoàn toàn một lần khi khởi động.


17
Đẹp vì nó cũng hoạt động chỉ cần gõ nó tại dấu nhắc lệnh. cho / L% n trong (1,0,2) làm @echo. "chào các bạn"
Nicholi

Chúc giải pháp này có thêm một chút giải thích.
Nelda.techspiress

19

đọc help GOTO

và cố gắng

:again
do it
goto again

4

Một cách khác tốt hơn để làm điều đó:

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

Bằng cách này bạn cũng có thể xử lý lỗi


1

Dưới đây là một ví dụ về việc sử dụng vòng lặp:

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

Đây là đợt đơn giản tôi sử dụng khi tôi cần mã hóa bất kỳ tin nhắn nào vào băm md5 trên Windows (yêu cầu openssl) và chương trình sẽ lặp lại một cách tự nhiên trừ khi đưa ra Ctrl + C hoặc đầu vào trống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.