बैच फ़ाइल को कॉल करके बनाई गई प्रक्रिया पूरी होने तक प्रतीक्षा कर रहा है

MyFile1.bat invokes MyFile2.bat twice:

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ

इस बिंदु पर, मैं कॉल कैसे कर सकता हूं जब तक कि MyFile2.bat पर कॉल की गई दोनों प्रक्रियाएं पूरी नहीं हो जातीं?

8

4 उत्तर

प्रारंभ/WAIT पैरामीटर का सरल उपयोग करें।

start /wait MyFile2.bat argA, argB, argC
start /wait MyFile2.bat argX, argY, argZ
7
जोड़ा
या प्रारंभ को कॉल में बदलें, जो मेरा पहला विचार था। हालांकि, शायद वे दो कॉल समानांतर में चलाना चाहते हैं। इस मामले में, न तो आपका सुझाव और न ही मेरा वास्तव में उपयुक्त होगा।
जोड़ा लेखक Andriy M, स्रोत
start /w cmd /c "start cmd /c MyFile2.bat argA, argB, argC & start cmd /c MyFile2.bat argA, argB, argCt"

मेरे परीक्षणों के मुताबिक इसे MyFile2.bat प्रदान करना चाहिए। असल में बल्ले फ़ाइलों के लिए पूर्ण पथ का उपयोग किया जाना चाहिए।

3
जोड़ा

आप इसे जानने के लिए "स्थिति फाइल" का उपयोग कर सकते हैं; उदाहरण के लिए, MyFile1.bat में निम्न कार्य करें:

echo X > activeProcess.argA
start MyFile2.bat argA, argB, argC
echo X > activeProcess.argX
start MyFile2.bat argX, argY, argZ
:waitForSpawned
if exist activeProcess.* goto waitForSpawned

और MyFile2.bat के अंत में इस पंक्ति को डालें:

del activeProcess.%1

आप इस लूप में कम CPU को बर्बाद करने के लिए प्रतीक्षा चक्र में पिंग देरी भी डाल सकते हैं।

3
जोड़ा
+1, लेकिन यह सुनिश्चित करने के लिए कि अनुमतियों के साथ कोई समस्या नहीं हो सकती है, शायद % TEMP% निर्देशिका में ध्वज फ़ाइलों को बनाना एक अच्छा विचार होगा। और मैं शायद : waitForSpawned और स्थिति के बीच एक छोटी देरी जोड़ूंगा, और मैं del line (क्या आपका मतलब del activeProcess। * , वैसे?) स्क्रिप्ट के शुरुआत पर, स्क्रिप्ट को अप्रत्याशित रूप से बाधित होने पर सुरक्षित पक्ष पर रहने के लिए।
जोड़ा लेखक Andriy M, स्रोत

आप इसे इस तरह से कर सकते हैं:

start MyFile2.bat argA, argB, argC
start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit

:testEnd
if exist end.val (del end.val
                  echo Process completed
                  pause)
>nul PING localhost -n 2 -w 1000
goto:testEnd

जब दूसरा start2.bat फिनिश जॉब होता है तो फ़ाइल "End.val" बनाई जाएगी, आपको यह जांचना होगा कि यह फ़ाइल मौजूद है या नहीं, तो आप जानते हैं कि आपकी प्रक्रिया पूरी हो गई है।

If the first myfile2 can take more time to execute then the second you can do the same (with another filename) with the first start myfile2.bat and make a test more in the :testend

 start MyFile2.bat argA, argB, argC ^& echo.^>End1.val ^& exit
 start MyFile2.bat argX, argY, argZ ^& echo.^>End.val ^& exit

:testEnd
if exist end.val if exist end1.val (del end.val
                                    del end1.val
                                    echo Process completed
                                    pause)
>nul PING localhost -n 2 -w 1000
goto:testEnd
2
जोड़ा