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


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

If installed GOTO END
    Install.exe
END:

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

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


39
2018-03-09 20:46


मूल




जवाब:


दौड़ने का प्रयास करें

START /WAIT Install.exe

72
2018-03-09 20:54



इस जवाब के साथ महान काम! - l--''''''---------''''''''''''
क्या आप चेन कर सकते हैं? like start /wait install; exit? - Serj Sagan
आप हमेशा कर सकते हैं cmd /C start /wait install - graywolf
क्या होगा यदि आपको उस प्रक्रिया की प्रतीक्षा करने की आवश्यकता है जिसे बैच फ़ाइल शुरू नहीं हुई थी? - Kyle Delaney


एक छोटा रास्ता:

Install.exe|more

भी

install|rem

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


20
2017-10-22 12:34



और डाउनलवोट क्यों है? - npocmaka
यह उत्कृष्ट है! मैं आपको वोट देता हूं। - Changwang Zhang
यह स्पष्ट रूप से जीतता है - Fnord


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

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

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


10
2018-03-09 21:25



यह देखने के लिए कि आप msiexec.exe (या जो कुछ भी है) चल रहा है या फिर प्रतीक्षा करें और फिर लूप करें, यह देखने के लिए आप शटडाउन रूटीन में हमेशा एक लूप जोड़ सकते हैं। - mfinni
@ मिफिनी, सिर्फ मामलों को जटिल बनाने के लिए, msiexec अक्सर अन्य प्रक्रियाओं को भी बंद कर देता है। :( - John Gardeniers
दरअसल, आपको इसकी आवश्यकता क्यों है start /wait बिल्कुल भी? मुझे लगता है कि इसका उपयोग करने की आवश्यकता है start /wait जीयूआई (कंसोल के विपरीत के रूप में) तक बैच फ़ाइल को अवरुद्ध करने के लिए आवेदन खत्म हो जाता है। लेकिन अब इसका परीक्षण कर रहा है, मुझे लगता है कि बैच फ़ाइलें वास्तव में जीयूआई अनुप्रयोगों के लिए भी प्रतीक्षा करेंगी। मैंने इसी सवाल को पोस्ट किया है: जीयूआई एप्लिकेशन बैच फ़ाइल क्यों ब्लॉक करता है? - Martin Prikryl
मुझे यह समस्या थी, मेरे समाधान को एक उत्तर के रूप में जोड़ा गया। - FreeSoftwareServers


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

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

3
2018-06-19 12:46



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


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

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


0
2018-03-09 21:03





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

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
2018-03-15 02:21