Windows cmd स्क्रिप्ट से कई कमांड निष्पादित करना


136

मैं श्रृंखला में कई कार्य करने के लिए एक Windows cmd स्क्रिप्ट लिखने की कोशिश कर रहा हूं। हालाँकि, यह हमेशा स्क्रिप्ट में पहले कमांड के बाद बंद हो जाता है।

एक मावेन बिल्ड के बाद यह कमांड बंद हो जाता है (यह सुनिश्चित नहीं है कि यह प्रासंगिक है)।

मैं इसे कैसे चालू करूं और प्रत्येक कार्य को कृपया बारी-बारी से चलाऊं?

किसी भी सॉफ़्टवेयर को स्थापित करना या रजिस्ट्री को कॉन्फ़िगर करना आदि पूरी तरह से सवाल से बाहर है - यह एक वेनिला विंडोज एक्सपी स्थापना पर काम करना है जो मुझे डर है।

आदर्श रूप से मैं स्क्रिप्ट को गर्भपात कराना चाहूंगा यदि कोई भी आदेश विफल हो गया है, लेकिन यह "अच्छा है", आवश्यक नहीं है।

धन्यवाद।

जवाबों:


139

जब आप किसी अन्य .bat फ़ाइल को कॉल करते हैं, तो मुझे लगता है कि आपको कॉल के सामने "कॉल" की आवश्यकता है:

call otherCommand.bat

1
नमस्ते, मूल स्क्रिप्ट में मैं अन्य .cmd फ़ाइलों को कॉल नहीं कर रहा था, लेकिन मेरे पास इसे अलग-अलग फ़ाइलों में विभाजित करने के लिए है, इसलिए मैं प्रत्येक को बदले में चला सकता हूं। इसलिए, प्रत्येक कमांड के सामने कॉल डालने से लगता है कि यह ट्रिक है, धन्यवाद!
डैरेन ग्रीव्स

5
वास्तव में, विंडोज पर, mvnअपने आप में एक .bat फ़ाइल है, इस प्रकार आपको इसके लिए उपयोग करने की आवश्यकता callहै call mvn install; आम तौर पर आपको एक अतिरिक्त cmd फ़ाइल बनाने की आवश्यकता नहीं होती है।
jfpoilpret

2
ध्यान दें कि आपको बैच फ़ाइलों में अर्धविराम की आवश्यकता नहीं है। और इसका कारण यह है कि आपको कॉल का उपयोग करने की आवश्यकता है क्योंकि mvn खुद एक बैच फ़ाइल है और बैच फ़ाइलों को कॉल के साथ एक दूसरे को कॉल करने की आवश्यकता होती है, अन्यथा कॉल करने वाले पर नियंत्रण वापस नहीं होता है।
पुष्कर

@ गुलजार नाज़िम - क्या आप जानते हैं कि क्या मैं एक-एक बयान में सभी आदेशों को if-else स्टेटमेंट के साथ रख सकता हूं क्योंकि मैं इसे विभिन्न बैच फ़ाइलों में बनाए रखना नहीं चाहता?
एनजी 2-फन

1
मैं npmअपडेट और protractorटेस्ट के साथ कुछ ऐसा ही करने की कोशिश कर रहा था । मुझे नहीं लगा कि यह जवाब मुझे तब तक लागू हुआ जब तक मुझे एहसास नहीं हुआ npmऔर विंडोज पर फाइलें protractorहैं .cmd
joshden

45

यदि आप पहली बार सफल होते हैं तो दूसरी कमांड को निष्पादित करने के लिए आप कमांड के बीच && प्रतीक का उपयोग कर सकते हैं। अधिक जानकारी यहाँ http://commandwindows.com/command1.htm


धन्यवाद, मैं दे दूंगा कि ऊपर स्वीकार किए गए उत्तर के साथ संयोजन के रूप में प्रयास करें।
डैरेन ग्रीव्स

मावेन बिल्ड विफल होने पर क्या यह दूसरी स्क्रिप्ट के निष्पादन को रोक देगा?
वरुण अचर

वह लिंक टूट गया है: "बैकएंड सर्वर ने समय पर प्रतिक्रिया नहीं दी। ऐप सर्वर बहुत व्यस्त है और समय में अनुरोधों को संभाल नहीं सकता है।"
केविनजी

1
@TheMM GUI- आधारित और कमांड-आधारित अनुप्रयोगों के बीच अंतर करता है (EXE फ़ाइल की शुरुआत के पास एक ध्वज है)। यदि आप कमांड लाइन से GUI- आधारित एप्लिकेशन शुरू करते हैं तो यह हमेशा कमांड लाइन से पूरी तरह से अलग होने के बाद तुरंत समाप्त होता है। यदि आप GUI प्रोग्राम (जैसे एक्सप्लोरर) से कमांड-आधारित प्रोग्राम शुरू करते हैं तो यह हमेशा एक नई कमांड लाइन दिखाएगा। POSIX सिस्टम ऐसा कोई भेद नहीं करता है जिससे व्यवहार अधिक सुसंगत हो।
कोडरफॉर्फ़िन

2
@ इस के आसपास पाने के लिए आप उपयोग कर सकते हैंstart /B /WAIT calc
कोडरफ़ॉर्फ़िन

25

यह निश्चित नहीं है कि पहला आदेश क्यों रोक रहा है। यदि आप इसे समानांतर बना सकते हैं, तो आप कुछ इस तरह की कोशिश कर सकते हैं

start cmd.exe /C 1.bat      
start cmd.exe /C 2.bat

7
का प्रयोग करें /Kबजाय /Cयदि आप खोल खुले रहने के लिए अपने आदेश निष्पादित होने के बाद चाहते हैं।
जेलिकैट

का उपयोग करने की जरूरत नहीं है cmd.exeऔर start, बस start x.bat1करेंगे।
user66001

23

मैं मावेन टेस्ट स्क्रिप्ट चलाने के लिए एक बैच स्क्रिप्ट बनाने का सटीक (ईश) कार्य कर रहा हूं। समस्या यह है कि एमवीएन क्लीन इंस्टाल के साथ मावेन स्क्रीप्स को कॉल करना ... स्वयं एक स्क्रिप्ट है और इसलिए कॉल मैनेट क्लीन इंस्टॉल के साथ किया जाना चाहिए।

कोड जो काम करेगा

rem run a maven clean install
cd C:\rbe-ui-test-suite 
call mvn clean install
rem now run through all the test scripts
call mvn clean install -Prun-integration-tests -Dpattern=tc-login
call mvn clean install -Prun-integration-tests -Dpattern=login-1

कॉल के उपयोग के बजाय ध्यान दें। यह बैच फ़ाइल में लगातार मावेन लिपियों के उपयोग की अनुमति देगा।


5

डबल एम्परसेंड का उपयोग करने पर दूसरा कमांड चलेगा, केवल अगर पहला सफल होता है:

cd Desktop/project-directory && atom .

जहां, केवल एक एम्परसेंड का उपयोग करके दोनों कमांड चलाने का प्रयास किया जाएगा, भले ही पहला विफल हो:

cd Desktop/project-directory & atom .

1

यदि आप विंडोज में चल रहे हैं तो आप निम्न कमांड का उपयोग कर सकते हैं।

चलाना:

cd "Script location"
schtasks /run /tn "TASK1"
schtasks /run /tn "TASK2"
schtasks /run /tn "TASK3"
exit

1

मुझे आपके प्रश्न का सीधा उत्तर नहीं पता है, लेकिन यदि आप इन लिपियों को बहुत अधिक करते हैं, तो यह अधिक शक्तिशाली भाषा सीखने की तरह हो सकता है। विंडोज के लिए नि: शुल्क कार्यान्वयन मौजूद है (उदाहरण के लिए सक्रिय, साइबरविन)। मैंने इसे अपने कार्यों के लिए शुरुआती प्रयास के लायक पाया है।

संपादित करें:

जैसा कि @Ferruccio द्वारा सुझाया गया है, यदि आप अतिरिक्त सॉफ़्टवेयर स्थापित नहीं कर सकते हैं, तो vbscript और / या जावास्क्रिप्ट पर विचार करें। वे विंडोज स्क्रिप्टिंग होस्ट में निर्मित हैं।


धन्यवाद, लेकिन मैं किसी भी सॉफ्टवेयर को स्थापित करने में असमर्थ हूं। काश, मेरे पास भद्दी विंडोज स्क्रिप्टिंग भाषा की तुलना में कुछ अधिक शक्तिशाली तक पहुंच होती। :-(
डैरेन ग्रीव्स

6
आप हमेशा vbscript या जावास्क्रिप्ट का उपयोग कर सकते हैं। वे विंडोज स्क्रिप्टिंग होस्ट में निर्मित हैं।
फेरेकियो

0

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

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