Windows toplu iş dosyasında sonsuz bir döngü nasıl oluşturulur?


160

Bu temelde bir toplu iş dosyasında istediğim şey. "Duraklat" ı geçmek için herhangi bir tuşa bastığımda "Do Stuff" ı yeniden çalıştırabilmek istiyorum.

while(true){
    Do Stuff
    Pause
}

Görünüşe göre sadece fordöngüler var ve whiletoplu işte döngüler yok . O halde sonsuz bir döngüyü nasıl oluştururum?


4
Bir Windows / DOS toplu iş dosyası mı soruyorsunuz?
thkala

Evet, belirsiz olduğum için üzgünüm, OP'ye bir zeyilname yapacağım.
sooprise

1
+1 ooops, diğer cevabı fark etmeden yayınladım!
PA.

Şunları yapabilirsiniz Kullanım For CommandVeya Bağlantı
scientist_7

Yanıtlar:


289

İyi (?) Eski kullanmaya ne dersiniz goto?

:loop

echo Ooops

goto loop

Ayrıca bkz bu daha yararlı bir örnek.


iyi değil: D bazen daha hızlı ama asla iyi değil: Tamam tamam goto için sadece bir iyi yer var - en düşük programlamada x)
jave.web 14:13

Jave.web ile katılıyorum, aşağıdaki for döngüsü önerisini kullanmalısınız. Kodlamada bile neredeyse hiç goto kodunuzda kullanmamalısınız. Goto 80'lerde GW Basic günlerinde geri döndü.
DoodleKana

Ve cmd isteminden?
theonlygusti

13
Jave.web ile aynı fikirde değilim - doğru kullanırsanız goto ile ilgili yanlış bir şey yoktur. Örneğin, döngü içinde yeniden çalışan programın herhangi bir nedenle ölmesi durumunda otomatik olarak yeniden doğmalarını sağlamak için kullanmak üzereyim. Bununla birlikte, programım herhangi bir nedenle anında ölürse, cpu çökmesini durdurmak için döngüde küçük bir bekleme koymak akıllıca olabilir.
John Hunt

1
@theonlygusti Beklediğiniz gibi tek satırlık bir komut olarak çalışmaz:lbl & echo Ooops & goto lbl ; ancak @Nicholi'nin aşağıdaki yorumu :FOR /L (1,0,2) DO @echo Oops
JimB

77

Pencerelerde kullanmak için tek satır komutunda sınırsız döngü cmd:

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

resim açıklamasını buraya girin


7
Bunu bir toplu iş dosyasında kullanmak için: FOR / L %% N IN () DO @echo Oops
Phil Roggenbuck

Bu düşük puanlı bir cevaptır. Teşekkür ederim!
var firstName

63

0'dan 10'a kadar artışla 1'den 10'a kadar sayılan gerçekten sonsuz bir döngü. 10'a
ulaşmak için sonsuz veya daha fazla artışa ihtiyacınız var.

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 :loopBir for-loop başlangıçta tamamen bir kez önbelleğe alındığından, sürümden çok daha hızlı olduğu için gerçekten sonsuz bir döngüye ihtiyacınız varsa bu yararlı olabilir .


17
Güzel çünkü sadece komut istemine yazarak da çalışıyor. / 1,0% için @ (1,0,2) do @echo. "merhaba çocuklar"
Nicholi

Bu çözümün biraz daha açıklaması olsaydı.
Nelda.techspiress

19

okumak help GOTO

ve dene

:again
do it
goto again

4

Bunu yapmanın daha iyi bir yolu:

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

Bu şekilde hatalarla da ilgilenebilirsiniz


1

Döngüyü kullanmanın bir örneği:

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

Bu, Windows (md5 karma) herhangi bir mesaj şifrelemek gerektiğinde kullandığım basit toplu iştir (openssl gerekli) ve program verilen Ctrl + C veya boş giriş dışında sadık bir şekilde tekrar ediyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.