कैसे एक बैच फ़ाइल में सोने के लिए?


132

एक कमांड और अगले एक के बीच विंडोज बैच फ़ाइल में थोड़ी देर के लिए निष्पादन को कैसे रोकें?


क्या यह एक विहित बनने का इरादा है? यदि ऐसा है तो कुछ व्याख्यात्मक पाठ उपयुक्त हो सकता है।
जॉन गार्डनियर्स

2
"व्याख्यात्मक पाठ" के रूप में?
मैसिमो

2
अधिकांश, यदि सभी नहीं, विहित प्रश्न मैंने देखे हैं, उस प्रश्न के आशय का वर्णन करने वाला पाठ शामिल है।
जॉन गार्डनियर्स

या स्थिति को समझाते हुए कुछ पाठ ... यह ज्यादातर एसईओ के साथ मदद करने के लिए है, लेकिन संभावित उत्तरों को फ्रेम करने में भी मदद करता है।
क्रिस एस

2
एसईओ ठीक काम कर रहा है। Google खोज पर मेरे लिए सबसे पहले हिट।
jbo5112

जवाबों:


194

एक बैच फ़ाइल में सोने का सही तरीका timeoutविंडोज 2000 में पेश किए गए कमांड का उपयोग करना है ।

29 और 30 सेकंड के बीच कहीं प्रतीक्षा करने के लिए :

timeout /t 30

यदि उपयोगकर्ता किसी भी कुंजी को हिट करता है तो मध्यांतर बाधित हो जाएगा; हालाँकि, कमांड वैकल्पिक स्विच को भी स्वीकार करता है /nobreak, जो स्पष्ट रूप से, उपयोगकर्ता द्वारा दबाए जाने वाले किसी भी चीज़ को प्रभावी रूप से अनदेखा करता है CTRL-C:

timeout /t 30 /nobreak

इसके अतिरिक्त, यदि आप स्क्रीन पर इसकी उलटी गिनती प्रिंट करने के लिए कमांड नहीं चाहते हैं, तो आप इसके आउटपुट को रीडायरेक्ट कर सकते हैं NUL:

timeout /t 30 /nobreak > NUL

6
2003 संसाधन किट के साथ भी टाइमआउट कमांड विंडोज एक्सपी के साथ काम नहीं करता है और स्लीप कमांड विंडोज 7 में काम नहीं करता है इसलिए पिंग कमांड अभी भी अच्छे उपयोग की हो सकती है यदि आप Win7 और WinXP दोनों पर बैच फ़ाइल का उपयोग कर रहे हैं।

12
टाइमआउट गैर-संवादात्मक स्क्रिप्ट में काम नहीं करता है: "ERROR: इनपुट पुनर्निर्देशन समर्थित नहीं है, प्रक्रिया से तुरंत बाहर निकलता है।" इसलिए कभी-कभी "पिंग" के साथ हैक का उपयोग करना पसंद किया जाता है।
iMysak

14

चूंकि यह यहां भी लागू होता है, इसलिए मैं अपने उत्तर को दूसरी साइट से कॉपी करूंगा

यदि आप पिंग का उपयोग करना चाहते हैं, तो एक बेहतर तरीका है। आप एक ऐसे पते को पिंग करना चाहते हैं जो मौजूद नहीं है, इसलिए आप मिलीसेकंड परिशुद्धता के साथ एक टाइमआउट निर्दिष्ट कर सकते हैं। सौभाग्य से, ऐसा पता एक मानक (आरएफसी 3330) में परिभाषित किया गया है, और यह है 192.0.2.x। यह बना-बनाया नहीं है, यह वास्तव में मौजूदा नहीं के एकमात्र उद्देश्य के साथ एक पता है (यह स्पष्ट नहीं हो सकता है, लेकिन यह स्थानीय नेटवर्क में भी लागू होता है):

192.0.2.0/24 - यह ब्लॉक प्रलेखन और उदाहरण कोड में उपयोग के लिए "टेस्ट-नेट" के रूप में सौंपा गया है। इसका उपयोग अक्सर वेंडर और प्रोटोकॉल प्रलेखन में डोमेन नाम example.com या example.net के संयोजन में किया जाता है। इस ब्लॉक के पते सार्वजनिक इंटरनेट पर प्रदर्शित नहीं होने चाहिए।

123 मिलीसेकेंड के लिए सोने के लिए, का उपयोग करें ping 192.0.2.1 -n 1 -w 123 >nul


3
कृपया ऐसा न करें, भले ही यह वास्तविक पते को पिंग करने से थोड़ा बेहतर हो। Pingबस काम के लिए गलत उपकरण है।
मासिमो

1
@ मसिमो यह सबसे अधिक संभावना नहीं है कि यह करने का इरादा था :) लेकिन मुझे लगता है कि यह अभी भी एक अच्छा समाधान है - यह कुछ परिदृश्यों (विशेष रूप से उच्च रिज़ॉल्यूशन) में टाइमआउट से बेहतर काम करता है। इसके अलावा, यह काफी अच्छी तरह से जाना जाता है, इसलिए ज्यादातर लोग बहुत आश्चर्यचकित नहीं होंगे (अर्थात भ्रमित) जब वे इसे आपके बैच फ़ाइल में देखते हैं।
मफू

2
@ मासिमो ठीक है! मुझे लगता है कि हमारे पास अलग-अलग विचार हैं। यदि आपको कोई आपत्ति नहीं है, तो मैं अभी भी इस उत्तर को छोड़ दूंगा क्योंकि यह लोकलहोस्टिंग n की तुलना में बेहतर प्रतीत होता है n बार जैसा कि सबसे अधिक बार वर्णित है।
मफू

7
टाइमआउट उस पर काम करने वाले ऑपरेटिंग सिस्टम के लिए सही समाधान है। पिंग एकमात्र समाधान है जो 5.1-6.3 से काम करता है। 5.1 पर अभी भी 25% सिस्टम के साथ, टाइमआउट "सही तरीका" नहीं है।
विरमवुड

3
टाइमआउट किसी भी ऑपरेटिंग सिस्टम के लिए गलत समाधान है, क्योंकि यह विंडोज 10 में भी टूट गया है। क्या उपयोग एक कमांड है जो सिर्फ इनपुट अनुप्रेषित होने के कारण विफल हो जाता है?
हैरी जॉनसन

8

आप लोकलहोस्ट में एक पिंग भी डाल सकते हैं। इसे पूर्ण होने में (डिफ़ॉल्ट रूप से) 4 सेकंड का समय लगेगा। यह कुछ लोगों द्वारा एक कीचड़ माना जाता है, लेकिन सभी समान रूप से अच्छी तरह से काम करता है।

कमांड:
पिंग 127.0.0.1


6
एहम ... इस प्रश्न / ए का पूरा उद्देश्य दो अन्य प्रश्नों को ठीक करना था, जो उनके स्वीकृत उत्तर के रूप में हैं, लेकिन अब इसे ठीक नहीं किया जा सकता है क्योंकि उनका ओपी अब आसपास नहीं है।
मैसिमो

6
जबकि यह काम करेगा यह एक हथौड़ा के साथ एक पेंच ड्राइविंग के बराबर है। एक गलत उपकरण काम कर सकता है, लेकिन यह अभी भी गलत है।
voretaq7

1
@MarkAllen दूसरे शब्दों में, Windows NT4, 95, 98, ME और पुराने?
क्रिस मैककेन

5
@MarkAllen - तकनीकी रूप से आपको इसके बारे में चिंता करनी होगी कि pingआपके ओएस के साथ आता है या नहीं । यदि आप '95 '9 या एमई के बारे में पर्याप्त चिंतित हैं, तो आपको 6.22 के बारे में उतना ही चिंतित होना चाहिए जो pingया तो नहीं है
मार्क हेंडरसन

4
@MarkHenderson यह याद रखना आसान है कि (मेरे लिए) OS का कोई विशेष रिलीज़ टीसीपी / आईपी का समर्थन करता है या नहीं, यह याद रखने की तुलना में कि इसमें एक कमांड शामिल है जिसे मैंने पहले नहीं सुना था। तुम्हे पता हैं?
मार्क एलन

2

डिस्क्लेमर : यह "आदर्श" समाधान नहीं है, इसलिए मुझे इस तरह से उन लोगों के साथ सिर पर पिटाई करने की चिंता न करें, जो अनुशंसा कर रहे हैं ping...

जब संभव हो, तो timeoutसुनिश्चित करने के लिए उपयोग करें। लेकिन जैसा कि टिप्पणियों में कहा गया है, यह हमेशा एक विकल्प नहीं होता है (जैसे गैर-इंटरैक्टिव मोड में)। उसके बाद, मैं मानता हूं कि ping"कीचड़" शायद अगला सबसे अच्छा विकल्प है, क्योंकि यह बहुत सरल है। उस ने कहा, मैं एक और विकल्प प्रदान करता हूं ... कुछ VB स्क्रिप्ट एम्बेड करें ।

इस समाधान के आधार में इसके अलावा सभी प्रकार के अनुप्रयोग हैं। अक्सर VBS वे चीजें कर सकता है जो बैच नहीं कर सकते हैं, या बहुत कम से कम बहुत अधिक आसानी से करते हैं। यहाँ चित्रित तकनीक का उपयोग करके, आप दोनों को मिला सकते हैं ("मूल रूप से नहीं", लेकिन "कार्यात्मक रूप से" ...)।

यहां एक लाइनर है, एक अस्थायी स्क्रिप्ट बनाने के लिए, इसे निष्पादित करें, फिर इसे हटा दें। स्क्रिप्ट आपके लिए सो रही है (इस उदाहरण में 3 सेकंड के लिए)।

echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs

यहाँ मूल रूप से एक ही बात है, थोड़ा अलग तरीके से लिखा गया है:

set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%

और फिर अंत में, जैसे ping, CScriptअपने आप में एक टाइमआउट विकल्प होता है! इसलिए, यदि आप स्क्रिप्ट में एक अनंत लूप दर्ज करते हैं, तो आप दुभाषिया को अवधि को लागू करने दे सकते हैं। ध्यान दें, यह एक "व्यस्त" ऑपरेशन है, जो सीपीयू खाता है, और इसलिए मैं इसकी अनुशंसा नहीं करता हूं जब आप WScript.Sleepप्रक्रिया का उपयोग कर सकते हैं , लेकिन मैं इसे पूर्णता के लिए एक वैचारिक विकल्प के रूप में प्रस्तुत करता हूं:

set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%

आप जानते हैं ... आप इसे पावरशेल में कर सकते हैं, मुझे उम्मीद है, बिना फाइल लिखे।
हैरी जॉन्सटन

हाँ, यह एक और अच्छा समाधान होने की संभावना है, हालांकि यह मेरा मानना ​​है कि विंडोज के पुराने संस्करणों के साथ अधिक पीछे संगत है।
बुविएनज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.