विंडोज बैच फ़ाइल में अनंत लूप कैसे बनाएं?


160

यह मूल रूप से एक बैच फ़ाइल में जो मैं चाहता हूं। जब भी मैं "पॉज" के पिछले हिस्से पर जाने के लिए कोई भी कुंजी दबाता हूं, तो "डू स्टफ" को फिर से चलाने में सक्षम होना चाहता हूं।

while(true){
    Do Stuff
    Pause
}

लगता है कि केवल forलूप उपलब्ध हैं और whileबैच में लूप नहीं हैं । मैं फिर अनंत लूप कैसे बनाऊं?


4
क्या आप विंडोज़ / डॉस बैच फाइल के बारे में पूछ रहे हैं?
थकाला

हाँ, अस्पष्ट होने के लिए खेद है, मैं ओपी को एक परिशिष्ट दूंगा।
मृग

1
+1 ooops, मैंने अन्य उत्तर को देखे बिना पोस्ट किया!
पीए

आप For Command
वैज्ञानिक_7

जवाबों:


289

अच्छा (?) पुराने का उपयोग करने के बारे में कैसे goto?

:loop

echo Ooops

goto loop

अधिक उपयोगी उदाहरण के लिए इसे भी देखें ।


कोई अच्छा नहीं: डी कभी-कभी जल्दी लेकिन कभी अच्छा नहीं होता: डी ठीक है गोटो के लिए केवल एक अच्छी जगह है - सबसे कम प्रोग्रामिंग एक्स में)
jave.web

मैं jave.web से सहमत हूं, आपको नीचे दिए गए लूप सुझाव का उपयोग करना चाहिए। आपको अपने कोड में लगभग कभी भी गोटो का उपयोग नहीं करना चाहिए, भले ही वह स्क्रिप्टिंग हो। गोटो 80 के दशक में जीडब्ल्यू बेसिक दिनों में वापस ठंडा था।
DoodleKana

और cmd प्रॉम्प्ट से?
theonlygusti

13
मैं jave.web से असहमत हूं - अगर आप इसे सही तरीके से उपयोग करते हैं तो गोटो के साथ कुछ भी गलत नहीं है। उदाहरण के लिए, मैं लूप ऑटो-रिस्पॉन्स के भीतर चलने वाले प्रोग्राम को सुनिश्चित करने के लिए इसका उपयोग करने वाला हूं अगर यह किसी भी कारण से मर जाता है। हालांकि यह समझदारी हो सकती है कि अगर कोई कार्यक्रम किसी कारणवश तुरंत मर जाता है, तो सीपीयू थ्रैशिंग को रोकने के लिए लूप में एक छोटा सा इंतजार करना पड़ता है।
जॉन हंट

1
@Theonlygusti एक-लाइन कमांड के रूप में काम नहीं करता , जैसा कि आप उम्मीद करेंगे :lbl & echo Ooops & goto lbl; लेकिन @ निचे की टिप्पणी नीचे दी गई है :FOR /L (1,0,2) DO @echo Oops
जिमब

77

खिड़कियों में उपयोग के लिए एक-लाइन कमांड में असीमित लूप cmd:

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

यहां छवि विवरण दर्ज करें


7
एक बैच फ़ाइल प्रकार में उपयोग करने के लिए: / L %% N IN () DO @echo उफ़
फिल रोजगेनबक

यह एक अंडर रेटेड जवाब है। धन्यवाद!
var पहला नाम

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 :loopसंस्करण की तुलना में बहुत तेज है क्योंकि एक फॉर-लूप को स्टार्टअप पर एक बार पूरी तरह से कैश किया जाता है।


17
अच्छा लगा क्योंकि यह भी कमांड प्रॉम्प्ट पर इसे टाइप करने का काम करता है। for / L% n in (1,0,2) do @echo। "हाय दोस्तों"
निकोली

काश इस समाधान की थोड़ी और व्याख्या होती।
Nelda.techspiress 16


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

यह वह साधारण बैच है जिसका मैं उपयोग करता हूं जब मुझे विंडोज (ms5l) पर md5 हैश में किसी भी संदेश को एन्क्रिप्ट करने की आवश्यकता होती है, और प्रोग्राम Ctrl + C या खाली इनपुट को छोड़कर केवल स्वयं को दोहराता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.