Bagaimana cara membuat loop tak terbatas dalam file batch Windows?

160

Ini pada dasarnya yang saya inginkan dalam file batch. Saya ingin dapat menjalankan kembali "Do Stuff" setiap kali saya menekan tombol apa saja untuk melewati "Jeda".

while(true){
    Do Stuff
    Pause
}

Sepertinya hanya ada forloop yang tersedia dan tidak ada whileloop dalam batch. Bagaimana cara membuat loop tak terbatas?

sooprise
sumber
4
Apakah Anda bertanya tentang file batch Windows / DOS?
thkala
Ya, maaf karena tidak jelas, saya akan membuat addendum ke OP.
sooprise
1
+1 ooops, saya memposting tanpa memperhatikan jawaban yang lain!
PA.
Anda dapat Menggunakan For CommandAtau Tautan
scientist_7

Jawaban:

289

Bagaimana kalau menggunakan barang lama (?) goto?

:loop

echo Ooops

goto loop

Lihat juga ini untuk contoh yang lebih bermanfaat.

thkala
sumber
tidak baik: D terkadang lebih cepat tetapi tidak pernah baik: D ok hanya ada satu tempat yang bagus untuk goto - dalam pemrograman terendah x)
jave.web
Saya setuju dengan jave.web, Anda harus menggunakan saran for loop di bawah ini. Anda seharusnya hampir tidak pernah menggunakan goto dalam kode Anda meskipun itu adalah scripting. Goto kembali keren di GW Basic days di tahun 80-an.
DoodleKana
Dan dari cmd prompt?
theonlygusti
13
Saya tidak setuju dengan jave.web - tidak ada yang salah dengan goto jika Anda menggunakannya dengan benar. Sebagai contoh, saya akan menggunakannya untuk memastikan program yang dijalankan dalam loop otomatis respawn jika mati karena alasan apa pun. Namun mungkin bijaksana untuk meletakkan menunggu kecil di loop untuk menghentikan meronta-ronta cpu jika program saya mati seketika karena alasan tertentu.
John Hunt
1
@theonlygusti Tidak berfungsi sebagai perintah satu baris, seperti yang Anda harapkan :lbl & echo Ooops & goto lbl; tapi komentar @Nicholi di bawah ini tidak :FOR /L (1,0,2) DO @echo Oops
JimB
77

Pengulangan tak terbatas dalam perintah satu baris untuk digunakan di cmdwindows:

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

masukkan deskripsi gambar di sini

Nabi KAZ
sumber
7
Untuk menggunakannya dalam file batch, ketik: UNTUK / L %% N IN () DO @echo Ups
Phil Roggenbuck
Ini adalah jawaban yang berperingkat rendah. Terima kasih!
var firstName
63

Lingkaran yang benar-benar tak terbatas, menghitung dari 1 hingga 10 dengan kenaikan 0.
Anda perlu penambahan tak terbatas atau lebih untuk mencapai 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

Ini bisa berguna jika Anda memerlukan loop yang benar-benar tak terbatas, karena jauh lebih cepat daripada goto :loopversi karena for-loop di-cache sepenuhnya satu kali saat startup.

jeb
sumber
17
Bagus karena ini juga berfungsi cukup mengetikkannya di command prompt. untuk / L% n di (1,0,2) do @echo. "Hai teman-teman"
Nicholi
Berharap solusi ini punya sedikit penjelasan lebih lanjut.
Nelda.techspiress
19

Baca help GOTO

dan coba

:again
do it
goto again
PA.
sumber
4

Cara lain yang lebih baik untuk melakukannya:

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

Dengan cara ini Anda bisa mengatasi kesalahan juga

Julito Sanchis
sumber
1

Berikut adalah contoh penggunaan loop:

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

Ini adalah kumpulan sederhana yang saya gunakan ketika saya perlu mengenkripsi pesan apa pun ke hash md5 pada Windows (diperlukan openssl), dan program ini akan dengan loyal mengulanginya kecuali diberikan Ctrl + C atau input kosong.

pengguna1147015
sumber