विंडोज बैच फ़ाइल चलाना असिंक्रोनस रूप से कमांड करता है


187

कहो, अगर मेरे पास है

  • foo.exe
  • bar.exe
  • baz.exe

मैं उन सभी को कैसे एक बैच फ़ाइल से अतुल्यकालिक रूप से चलाता हूं, अर्थात पिछले कार्यक्रम को रोकने के लिए इंतजार किए बिना?

जवाबों:


254

STARTप्रत्येक प्रोग्राम को चलाने के लिए कमांड का उपयोग करना चाहिए जो आपको चाहिए:

START "title" [/D path] [options] "command" [parameters]

प्रत्येक STARTआह्वान अपने पैरामीटर में दिए गए कमांड को चलाता है और जब तक कि एक /WAITस्विच के साथ निष्पादित नहीं किया जाता है, तुरंत वापस आ जाता है ।

यह कमांड-लाइन ऐप्स पर लागू होता है। कमांड लाइन के बिना ऐप्स वैसे भी तुरंत वापस आ जाते हैं, इसलिए सुनिश्चित करें, यदि आप सभी अतुल्यकालिक रूप से चलाना चाहते हैं, तो उपयोग करें START


ठीक है शुक्रिया। मुझे प्रत्येक प्रविष्टि को helpध्यान से पढ़ना चाहिए । :)
रिचएन

8
मुझे वास्तव में दूसरे दिन इससे परेशानी हुई। मुझे एक प्रदर्शन परीक्षण के लिए 30 एक्सप्लोरर विंडो लॉन्च करनी थीं। काम नहीं किया और यह मेरे लिए महत्वपूर्ण नहीं था कि मैं इस पर गौर करूं .. बजाय उस खिड़की में घूमना शुरू कर दिया और कई घंटे बाद जब मैंने इसे बंद कर दिया, तो एक और पॉप हो गया! और मैं जैसा था वैसा ही नर्क, उसे बंद कर दिया .. एक और चबूतरे पर! 4-5 खिड़कियों और बहुत कुछ के बाद **** मैंने देखा कि बैचफिल अभी भी चल रहा है!
जोनास बी

3
बेशर्म स्व-विज्ञापन: मैंने एक बार एक बैच बनाया था जो किसी प्रकार के थ्रेड पूल के रूप में कार्य करने में सक्षम है, बस प्रक्रियाओं के लिए: stackoverflow.com/questions/672719/…
जॉय

4
यदि आपको तर्क प्रदान करने की आवश्यकता है या यदि कमांड में पथ में रिक्तियाँ जोड़ने के लिए रिक्त स्थान हैं। इस मामले में आपको प्रारंभिक कंसोल विंडो के लिए एक शीर्षक प्रदान करने की आवश्यकता है: "" "[कमांड का पथ]" [कमांड आर्ग्स]
पियरलुइगी

क्या इस तकनीक के साथ यह बताने का कोई तरीका है कि यह कब किया जाता है? मैं ~ 30 कॉपी FILA DESTA को लात मार रहा हूं और मैं उन्हें async होना चाहता हूं, लेकिन मैं यह भी चाहता हूं कि जब वे सभी काम करेंगे तो मुझे कुछ विचार करना होगा।
डग

68

पिछले उत्तरों में से कुछ को मिलाकर, आप कोशिश कर सकते हैं start /b cmd /c foo.exe

एक तुच्छ उदाहरण के लिए, यदि आप जावा / ग्रूवी / ग्रेन / ग्रेडेल के संस्करणों को प्रिंट करना चाहते हैं, तो आप इसे एक बैच फ़ाइल में कर सकते हैं:

@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version

यदि आपके पास Process Explorer (Sysinternals) जैसी कोई चीज़ है, तो आप एक जावा प्रक्रिया (उपरोक्त आदेशों के अनुसार) के साथ प्रत्येक बच्चे को कुछ cmd.exe प्रक्रियाएँ देखेंगे। आउटपुट स्क्रीन पर प्रिंट होगा जो भी ऑर्डर वे खत्म करेंगे।

start /b :  Start application without creating a new window. The
             application has ^C handling ignored. Unless the application
             enables ^C processing, ^Break is the only way to interrupt
             the application

cmd /c : Carries out the command specified by string and then terminates

13
यह कमांड को कंसोल से इको होने से रोकता है। बैच स्क्रिप्ट में, कभी-कभी आप echo offशुरुआत में देखेंगे , जब आप स्क्रिप्ट निष्पादित करते हैं, तो सभी कमांड को कंसोल पर गूँजने से रोकेंगे। @समान है, लेकिन सिर्फ इतना है कि एक आदेश के लिए है। तो, कभी-कभी आप देखेंगे @echo off
djKianoosh

36

आप नई विंडो लॉन्च किए बिना पृष्ठभूमि प्रक्रियाओं को शुरू करने के लिए स्टार्ट कमांड का उपयोग कर सकते हैं:

start /b foo.exe

नई प्रक्रिया CTRL-C के साथ बाधित नहीं होगी; आप इसे केवल CTRL-BREAK (या विंडो को बंद करके, या टास्क मैनेजर के माध्यम से) मार सकते हैं।


5
BREAKइन दिनों कीबोर्ड पर कहां है ?
user2023370

1
@ उपयोगकर्ता 2023370 फिर भी पॉज़ कुंजी पर। अधिकांश लैपटॉप जिनमें कुछ कुंजी की कमी होती है, वे छिपे हुए कुंजी संयोजनों का समर्थन करते हैं ।
गेरोल्डब्रोज़ ने मोनिका


23

निम्नलिखित पंक्तियों के साथ एक बैच फ़ाइल बनाएँ:

start foo.exe
start bar.exe
start baz.exe 

शुरुआत आदेश तो सभी 3 आदेशों एसिंक्रोनस रूप से चल पाएंगे, एक नई विंडो में अपने आदेश चलाता है।


17

START कमांड का उपयोग करें :

start [programPath]

यदि प्रोग्राम के पथ में रिक्त स्थान शामिल हैं तो उद्धरण जोड़ना याद रखें। इस मामले में आपको शुरुआती कंसोल विंडो के लिए एक शीर्षक प्रदान करना होगा

start "[title]" "[program path]"

यदि आपको तर्क देने की आवश्यकता है, तो उन्हें अंत में (कमांड कोट्स के बाहर) जोड़ें।

start "[title]" "[program path]" [list of command args]

नई कंसोल विंडो खोलने से बचने के लिए / b विकल्प का उपयोग करें (लेकिन उस स्थिति में आप CTRL-C का उपयोग करके एप्लिकेशन को बाधित नहीं कर सकते


10

एक तीसरा (और संभवतः बहुत आसान) विकल्प है। यदि आप एकल प्रोग्राम के कई उदाहरणों को स्पिन करना चाहते हैं, तो एक्सिक्स या जीएनयू समानांतर जैसे यूनिक्स-शैली कमांड प्रोसेसर का उपयोग करके इसे काफी सरल प्रक्रिया बना सकते हैं।

वहाँ एक win32 Xargs क्लोन PPX2 कहा जाता है जो इसे काफी सीधा बनाता है।

उदाहरण के लिए, यदि आप वीडियो फ़ाइलों की निर्देशिका ट्रांसकोड करना चाहते हैं, तो आप कमांड चला सकते हैं:

dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"

इसके अलावा उठाते हुए, dir /b *.mpgमेरी वर्तमान निर्देशिका में .mpg फ़ाइलों की एक सूची |को पकड़ता है, ऑपरेटर इस सूची को ppx2 में पाइप करता है, जो तब समानांतर में निष्पादित होने के लिए कमांड की एक श्रृंखला बनाता है; 4 एक बार में, जैसा कि -P 4ऑपरेटर द्वारा यहां निर्दिष्ट किया गया है। -L 1ऑपरेटर ppx2 बताता है एक बार में केवल ffmpeg लिस्टिंग हमारी निर्देशिका में से एक लाइन भेजने के लिए।

उसके बाद, आप बस अपनी कमांड लाइन ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4") लिखते हैं , और {}अपनी निर्देशिका सूची की प्रत्येक पंक्ति के लिए स्वचालित रूप से प्रतिस्थापित हो जाते हैं।

यह सार्वभौमिक रूप से हर मामले पर लागू नहीं होता है, लेकिन ऊपर दी गई बैच फ़ाइल वर्कअराउंड का उपयोग करने की तुलना में पूरी तरह से आसान है। बेशक, यदि आप फ़ाइलों की सूची के साथ काम नहीं कर रहे हैं, तो आप pxx2 के इनपुट में टेक्स्टफाइल या किसी अन्य प्रोग्राम की सामग्री को भी पाइप कर सकते हैं।


1
नवीनतम xargs win32 बंदरगाह आजकल अच्छी तरह से काम करता है (वैसे भी खिड़कियों के लिए गिट के साथ शामिल है)।
पीटर एम

यह बहुत अच्छा है सिवाय इसके कि यह यूनिकोड वर्ण वाली फ़ाइलों से निपटने में विफल रहता है। यूनिकोड फ़ाइलों का समर्थन करने के लिए कोई योजना? धन्यवाद।
गोखन गंभीर

@ GökhanSever अतीत में मैंने पथ के "संक्षिप्त नाम" रूप का उपयोग करके इस मुद्दे के आसपास काम किया है, जो C: \ PROGRA ~ 1 \ WINDOW ~ 3 \ MYPROG ~ 1.EXE की तरह दिखता है। सुंदर नहीं है, लेकिन यह काम करता है।
मोल्टेनफ़ॉर्म

-1

मुझे काम करने के लिए कुछ भी नहीं मिला मैं बल्लेबाजी स्क्रिप्ट शुरू करने के लिए बस शक्तियां का उपयोग करके समाप्त हो गया .. कभी-कभी सीएमडी / सी भी शुरू नहीं करता है यह सुनिश्चित करने के लिए काम नहीं करता है कि .. मैंने भी सीएमडी / सी नोटपैड और निकास जैसे सामान की कोशिश की

start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.