एक कमांड और अगले एक के बीच विंडोज बैच फ़ाइल में थोड़ी देर के लिए निष्पादन को कैसे रोकें?
एक कमांड और अगले एक के बीच विंडोज बैच फ़ाइल में थोड़ी देर के लिए निष्पादन को कैसे रोकें?
जवाबों:
एक बैच फ़ाइल में सोने का सही तरीका timeout
विंडोज 2000 में पेश किए गए कमांड का उपयोग करना है ।
29 और 30 सेकंड के बीच कहीं प्रतीक्षा करने के लिए :
timeout /t 30
यदि उपयोगकर्ता किसी भी कुंजी को हिट करता है तो मध्यांतर बाधित हो जाएगा; हालाँकि, कमांड वैकल्पिक स्विच को भी स्वीकार करता है /nobreak
, जो स्पष्ट रूप से, उपयोगकर्ता द्वारा दबाए जाने वाले किसी भी चीज़ को प्रभावी रूप से अनदेखा करता है CTRL-C
:
timeout /t 30 /nobreak
इसके अतिरिक्त, यदि आप स्क्रीन पर इसकी उलटी गिनती प्रिंट करने के लिए कमांड नहीं चाहते हैं, तो आप इसके आउटपुट को रीडायरेक्ट कर सकते हैं NUL
:
timeout /t 30 /nobreak > NUL
चूंकि यह यहां भी लागू होता है, इसलिए मैं अपने उत्तर को दूसरी साइट से कॉपी करूंगा ।
यदि आप पिंग का उपयोग करना चाहते हैं, तो एक बेहतर तरीका है। आप एक ऐसे पते को पिंग करना चाहते हैं जो मौजूद नहीं है, इसलिए आप मिलीसेकंड परिशुद्धता के साथ एक टाइमआउट निर्दिष्ट कर सकते हैं। सौभाग्य से, ऐसा पता एक मानक (आरएफसी 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
Ping
बस काम के लिए गलत उपकरण है।
आप लोकलहोस्ट में एक पिंग भी डाल सकते हैं। इसे पूर्ण होने में (डिफ़ॉल्ट रूप से) 4 सेकंड का समय लगेगा। यह कुछ लोगों द्वारा एक कीचड़ माना जाता है, लेकिन सभी समान रूप से अच्छी तरह से काम करता है।
कमांड:
पिंग 127.0.0.1
ping
आपके ओएस के साथ आता है या नहीं । यदि आप '95 '9 या एमई के बारे में पर्याप्त चिंतित हैं, तो आपको 6.22 के बारे में उतना ही चिंतित होना चाहिए जो ping
या तो नहीं है
डिस्क्लेमर : यह "आदर्श" समाधान नहीं है, इसलिए मुझे इस तरह से उन लोगों के साथ सिर पर पिटाई करने की चिंता न करें, जो अनुशंसा कर रहे हैं 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%