आप बैच फ़ाइल के पूरा होने के लिए कैसे प्रतीक्षा करते हैं?


43

मैं sp1 स्थापित करने के लिए शटडाउन पर एक exe निष्पादित करने के लिए एक स्क्रिप्ट बनाने की कोशिश कर रहा हूं। मेरी स्क्रिप्ट कुछ इस तरह जाती है (वास्तविक बल्ले स्क्रिप्ट नहीं)।

If installed GOTO END
    Install.exe
END:

मेरी समस्या यह है कि जब यह चलता है, तो यह इंस्टॉलर शुरू करता है, फिर स्क्रिप्ट को समाप्त करता है क्योंकि इंस्टॉलर की एक अलग प्रक्रिया होती है और इंस्टाल प्रक्रिया को बंद करने के बाद उसका अनुसरण होता है क्योंकि कंप्यूटर बंद हो जाता है और सिस्टम को बंद कर देता है (कम से कम, यही मुझे लगता है यह कर रहा है।)

क्या यह बताने का कोई तरीका है कि यह प्रक्रिया पूरी होने तक प्रतीक्षा करें और फिर बंद हो जाए?

जवाबों:


81

दौड़ने की कोशिश करो

START /WAIT Install.exe

इस जवाब के साथ महान काम!
l

क्या आप चेन कर सकते हैं? like start /wait install; exit?
सर्ज सगुन

आप हमेशा कर सकते हैंcmd /C start /wait install
ग्रेवॉल्फ

क्या होगा यदि आपको उस प्रक्रिया के लिए प्रतीक्षा करने की आवश्यकता है जो बैच फ़ाइल शुरू नहीं हुई है?
काइल डेलानी

23

एक छोटा तरीका:

Install.exe|more

भी

install|rem

उपयोग किया जा सकता है, हालांकि अधिक अंततः आप कुछ कंसोल आउटपुट को पकड़ने में सक्षम होंगे। और यही कारण है कि यह काम करता है - पाइपेड कमांड इनपुट के लिए इंतजार करता है


और नीचे क्यों है?
npocmaka

यह उत्कृष्ट है! मैं आपको वोट देता हूं।
चांगवांग झांग

2
यह स्पष्ट रूप से जीतता है
Fnord

क्या होगा अगर exe पैरामीटर लेता है? वह कैसे काम करेगा?
m4l490n

@ m4l490n - यह ठीक काम करेगा। पुनर्निर्देशन और सशर्त निष्पादन ऑपरेटरों (बैच स्क्रिप्ट में उच्च प्राथमिकता दी जाती है <, >, >>, &, &&, ||, |)
npocmaka

13

या तो बैच फ़ाइल से सीधे exe को कॉल करना, या उपयोग start /waitकरना काम करेगा लेकिन एक चेतावनी है।

यदि आप जो exe कॉल करते हैं, तो अन्य प्रक्रिया बनाता है, जैसे कि किसी अन्य exe को कॉल करना, और उसके बाद बैच फ़ाइल से बाहर निकलना प्रसंस्करण जारी रहेगा जिसे तथाकथित exe समाप्त कर दिया गया है, क्योंकि उसे इसके द्वारा शुरू की गई अन्य प्रक्रियाओं का कोई ज्ञान नहीं है।

आपके मामले में यह एक वास्तविक समस्या है क्योंकि इंस्टॉलर सामान्य रूप से संपीड़ित कंटेनर के कुछ रूप से फाइलें निकालते हैं, जो कि एक्सई में ही एम्बेडेड हो सकते हैं, फिर निकाले गए फाइलों में से एक को आग लगा सकते हैं और बाहर निकल सकते हैं। कुछ इंस्टॉलर कमांड लाइन पैरामीटर प्रदान करते हैं जो मूल exe को बताते हैं कि जब तक पूरी स्थापना पूरी न हो जाए, तब तक बाहर न निकलें, ताकि कुछ ऐसा हो जो आप जांचना चाहें। इसके अलावा, वहाँ अकेले बैच फ़ाइलों के साथ इस के आसपास कोई वास्तविक तरीका है और हल करने के लिए एक प्रोग्रामेटिक समाधान ले जाएगा।


यदि आप msiexec.exe (या जो भी नरक है) चल रहा है, तो यह देखने के लिए कि आप शटडाउन रूटीन में हमेशा एक लूप जोड़ सकते हैं।
22 सितंबर को mfinni

@mfinni, बस आगे भी मामलों को जटिल करने के लिए, msiexecअक्सर अन्य प्रक्रियाओं को भी बंद कर देती है। :(
जॉन गार्डनियर्स

1
वास्तव में, आपको आखिर इसकी आवश्यकता क्यों है start /wait? मैं स्वयं मानता था start /waitकि GUI (कंसोल के विपरीत) एप्लिकेशन के पूर्ण होने तक बैच फ़ाइल को ब्लॉक करने के लिए इसका उपयोग करना आवश्यक है । लेकिन अब इसका परीक्षण करते हुए, मैं देखता हूं कि बैच फाइलें वास्तव में जीयूआई अनुप्रयोगों के लिए भी इंतजार करती हैं। मैंने इसी प्रश्न को पोस्ट किया है: GUI एप्लिकेशन एक बैच फ़ाइल को क्यों अवरुद्ध करता है?
मार्टिन प्रिक्रील

मुझे यह समस्या थी, जवाब के रूप में अपना समाधान जोड़ा।
FreeSoftwareServers

5

यहां MATLAB का उपयोग करके एक उदाहरण दिया गया है! मैंने यह मान लिया है कि MATLAB के लिए पथ सेटअप किया गया है और MATLAB निकास FileName.m फ़ाइल (या उपयोगकर्ता ने इसे आंतरिक रूप से निर्दिष्ट किया है) द्वारा सुनिश्चित किया जा रहा है।

echo off
matlab -nosplash /r "FileName.m"
:loop
tasklist /fi "imagename eq MATLAB.exe" |find ":" > nul
if errorlevel 1 goto loop
exit

2
मतलबी मान लेना मुझे थोड़ा अजीब लगता है, खासकर यहाँ सर्वरफॉल्ट पर।
एरिक

यह MATLAB के अलावा अन्य चीजों के लिए काम कर सकता है। बस "MATLAB.exe" को किसी और चीज़ में बदलें। और शायद फ़िल्टर किए गए आउटपुट में फिर से exe की खोज करने के लिए उस दूसरी 'खोज' को ठीक करें।
ओलिवर बॉक

1

मुझे समस्या थी @ जॉन गार्डनियर्स ने कहा या वर्णन किया था, जहां मेरे एक्स ने एक और एक्स कहा जाता है और समाप्त कर दिया, उसके बाद शुरू / प्रतीक्षा नहीं हुई। मैंने एक "लूप" बनाया, ताकि यह पता चल सके कि क्या चल रहा है और फिर एक बार इसके पूरा हो जाने पर। अपनी आवश्यकताओं के अनुरूप समय को बढ़ाया जा सकता है।

TIMEOUT /T 60

SETLOCAL EnableExtensions
set EXE=MYEXETOCHECK.exe
:LOOPSTART
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto FOUND
goto FIN
:FOUND
TIMEOUT /T 30
goto LOOPSTART
:FIN

0

आप स्टार्ट / वेट कमांड का उपयोग कर सकते हैं। यह एक एप्लिकेशन शुरू करता है और इसके खत्म होने का इंतजार करता है।

या यदि आप जानते हैं कि इसे निष्पादित करने में कितना समय लगता है, तो आप विंडोज सर्वर 2003 रिसोर्स किट टूल्स द्वारा प्रदान किए गए स्लीप कमांड को देख सकते हैं । Sleep.exe का उपयोग किसी भी संख्या में कुछ भी स्थापित करने से पहले प्रोग्राम को पूरी तरह से स्थापित करने की अनुमति देने के लिए किसी भी संख्या में अपने बैच को रोकने के लिए किया जा सकता है। कुछ प्रोग्राम हैं जो "स्टार्ट / वेट" सिंटैक्स को अनदेखा करते हैं, प्रोग्राम के कारण ही एक अन्य प्रक्रिया शुरू होती है, फिर स्लीप। Ex बहुत उपयोगी है।

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