मैं दूसरे बैट फाइल से बैकग्राउंड में बैट फाइल कैसे चला सकता हूं?


91

मेरे पास एक "सेटअप" स्क्रिप्ट है जो मैं सुबह चलाता हूं जो सभी कार्यक्रमों को शुरू करता है जो मुझे चाहिए। अब उनमें से कुछ को पर्यावरण के अतिरिक्त सेटअप की आवश्यकता है, इसलिए मुझे उन्हें छोटे बैट स्क्रिप्ट में लपेटने की आवश्यकता है।

मैं इस तरह की स्क्रिप्ट को पृष्ठभूमि में विंडोज एक्सपी पर कैसे चलाऊं?

CALL env-script.bat इसे समकालिक रूप से चलाता है, अर्थात सेटअप स्क्रिप्ट केवल तब जारी रख सकती है जब env-script में कमांड समाप्त हो जाती है।

START/B env-script.bat एक ही कमांड प्रॉम्प्ट में CMD.exe का एक और उदाहरण चलाता है, इसे वास्तव में गड़बड़ स्थिति में छोड़ देता है (मैं नेस्टेड CMD.exe के आउटपुट को देखता हूं, कीबोर्ड थोड़ी देर के लिए मर जाता है, स्क्रिप्ट निष्पादित नहीं होती है)।

START/B CMD env-script.batवही परिणाम देता है। सीएमडी में कोई भी झंडे मेरे बिल से मेल नहीं खाते।

जवाबों:


72

वास्तव में, निम्नलिखित मेरे लिए ठीक काम करता है और नई खिड़कियां बनाता है:

test.cmd:

@echo off
start test2.cmd
start test3.cmd
echo Foo
pause

test2.cmd

@echo off
echo Test 2
pause
exit

test3.cmd

@echo off
echo Test 3
pause
exit

startजैसे कि /minमोशे ने बताया कि अगर आप नई विंडो को अपने सामने नहीं रखना चाहते हैं तो मापदंडों के साथ मिलाएं ।


1
ठीक है, यह काम करता है लेकिन 100% सही नहीं है: मैं "टेस्ट 2" में "रिटर्न" दबाने के बाद, वह विंडो बंद नहीं करता। कोई विचार?
आरोन दिगुल्ला

आप फिर से बंद करने के लिए स्पॉन्ड बैचों में "बाहर निकलें" जोड़ सकते हैं। क्षमा करें, उस दूर का परीक्षण नहीं किया गया :)
जॉय

वास्तव में start script1.bat \ n प्रारंभ script2.bat \ n प्रारंभ स्क्रिप्टN.bat मेरे लिए पर्याप्त था
andrej

142

दो साल पुरानी, ​​लेकिन पूर्णता के लिए ...

मानक, इनलाइन दृष्टिकोण: ( &लिनक्स में उपयोग करते समय आपको जो व्यवहार मिलेगा वह होगा )

START /B CMD /C CALL "foo.bat" [args [...]]

नोट: 1. CALL.bat फ़ाइल के साथ जोड़ा जाता है क्योंकि जहां यह आमतौर पर जाता है .. (यानी CMD /C CALL "foo.bat"यह एसिंक्रोनस बनाने के लिए फ़ॉर्म का सिर्फ एक एक्सटेंशन है । आमतौर पर, सही तरीके से एक्ज़िट कोड प्राप्त करना आवश्यक है, लेकिन यह एक गैर-मुद्दा है। यहाँ।); 2. .bat फ़ाइल के आस-पास के दोहरे उद्धरण चिह्नों के लिए केवल तभी आवश्यक है जब नाम में रिक्त स्थान हो। (नाम एक रास्ता हो सकता है जिस स्थिति में उस की अधिक संभावना है।)

यदि आप आउटपुट नहीं चाहते हैं:

START /B CMD /C CALL "foo.bat" [args [...]] >NUL 2>&1

यदि आप चाहते हैं कि बल्ला एक स्वतंत्र कंसोल पर चलाया जाए: (अर्थात दूसरी विंडो)

START CMD /C CALL "foo.bat" [args [...]]

यदि आप चाहते हैं कि दूसरी खिड़की बाद में घूम जाए:

START CMD /K CALL "foo.bat" [args [...]]

नोट: यह वास्तव में खराब रूप है जब तक कि आपके पास ऐसे उपयोगकर्ता नहीं हैं जो विशेष रूप से खोले हुए विंडो को सामान्य कंसोल के रूप में उपयोग करना चाहते हैं। यदि आप चाहते हैं कि विंडो आउटपुट को देखने के लिए इधर-उधर चिपके रहे, तो यह PAUSEबैट फाइल के अंत में डालने से बेहतर है । या अभी तक, ^& PAUSEकमांड लाइन के बाद जोड़ें :

START CMD /C CALL "foo.bat" [args [...]] ^& PAUSE

10
&एक "और फिर" (शब्दावली?) ऑपरेटर है। (उदाहरण का cmd1 & cmd2अर्थ है "cmd1" और फिर "cmd2"। &&ऑपरेटर के विपरीत , "cmd2" का निष्पादन "cmd1" के सफल निकास पर निर्भर नहीं करता है।) ^बच जाता है &ताकि यह भस्म होने के बजाय CMD के तर्कों में चला जाए। और उसी कंसोल से चलते हैं जो START को चलाता है।
1

यह बहुत मददगार है, धन्यवाद। मैं सिर्फ बंदरगाह लिनक्स के लिए कुछ स्क्रिप्ट के बारे में था, क्योंकि करने के लिए अन्य गाइड startऔर cmdमैं की मांग की पूर्ण कार्यक्षमता हार नहीं मानी। आपका जवाब यह नाखून।
इटरेटर

3
यदि आप आउटपुट नहीं चाहते हैं, तो पुनर्निर्देशन से बच जाना चाहिए ताकि यह सीएमडी को पास हो जाए। इसके अलावा CALL की आवश्यकता नहीं है:START /B "" CMD /C "foo.bat" [args [...]] ^>nul 2^>^&1
debhamham

1
@ डब्बेहैम: यद्यपि आप जो कह रहे हैं वह समझ में आता है, START /B "" CMD /C PING 127.0.0.1 >NULबिना किसी काम के लगता है और कुछ भी आउटपुट नहीं है। (शायद इसलिए कि मुझे CMDविरासत में मिली STARTI / O संभालती है।) मुझे लगता है कि अंतर यह है कि क्या आप STARTआउटपुट त्रुटि को बनाए रखना चाहते हैं , जो शायद एक अच्छा विचार है। CALLसिर्फ इसलिए कि मुझे लगा कि इसे रखना एक अच्छा अभ्यास है। (यानी सिंक्रोनस बैट कॉल्स के CALLलिए उपयोग नहीं करने के परिणामस्वरूप अप्रत्याशित निकास कोड होंगे, इसलिए मैं लगातार बैट बैट कॉल तब भी करता हूं जब यह सख्ती से लागू नहीं होता है, जैसे कि इस मामले में।)CALL
एंटैक

7

चूंकि सीएमडी स्क्रिप्ट से पृष्ठभूमि में कुछ निष्पादित करने का एकमात्र तरीका START है, इसलिए मैं आपको इसका उपयोग करने की सलाह दूंगा। / B संशोधक के बजाय, कोशिश करें / MIN ताकि नई बनाई गई विंडो आपको परेशान न करे। इसके अलावा, आप प्राथमिकता को कम / LOW या / BELOWNORMAL के साथ कुछ सेट कर सकते हैं, जिससे आपकी सिस्टम जवाबदेही में सुधार होना चाहिए।


-1 समस्या यह है कि जब आप BAT फाइल शुरू करते हैं तो START एक नई विंडो नहीं बनाता है; इसके बजाय यह वर्तमान विंडो का पुन: उपयोग करता है और I / O दो CMD प्रक्रियाओं को मिलाता है।
आरोन दिगुल्ला

4
यह एक नई विंडो नहीं बना रहा है क्योंकि आप / B ध्वज का उपयोग कर रहे हैं। इसे हटा दो।
मोशे

5

अग्रभूमि / पृष्ठभूमि अवधि के अलावा। रनिंग विंडो को छुपाने का दूसरा तरीका vbscript है, अगर अभी भी आपके सिस्टम में उपलब्ध है।

DIM objShell
set objShell=wscript.createObject("wscript.shell")
iReturn=objShell.Run("yourcommand.exe", 0, TRUE)

इसे sth.vbs के रूप में नाम दें और इसे बल्ले से बुलाएं, शेड किए गए कार्य में लगाएं, आदि। मैं व्यक्तिगत रूप से किसी भी विंडोज सिस्टम पर प्रबंधित किए बिना vbs को अक्षम कर दूंगा :)


मेरे विशेष उपयोग के मामले के लिए, यह वास्तव में एकमात्र उपाय था जो मुझे काम करने के लिए मिल सकता था ...
बेन

0

एक नया C # Windows एप्लिकेशन बनाएं और इस विधि को मुख्य से कॉल करें:

public static void RunBatchFile(string filename)
{
    Process process = new Process();

    process.StartInfo.FileName = filename;

    // suppress output (command window still gets created)
    process.StartInfo.Arguments = "> NULL";

    process.Start();
    process.WaitForExit();
}

2
उम्म ... मैं उम्मीद कर रहा था कि विज़ुअल स्टूडियो को स्थापित करने की आवश्यकता के रूप में कुछ सरल नहीं होगा ...
हारून डिगुल्ला

1
जब तक PowerShell 100% उपलब्ध है - C # वास्तव में ओवरकिल है।
जिम

2
हारून: C # संकलक को .NET फ्रेमवर्क 2 में शामिल किया गया है, इसलिए आप बस किसी पाठ संपादक में कुछ कोड को संपादित कर सकते हैं और उसे संकलित कर सकते हैं। फिर भी, चूंकि यह एक बैच फ़ाइल में पूरी तरह से संभव है, मैं यह भी कहूंगा कि C # ओवरकिल है।
जॉय

0

यह मेरे विंडोज एक्सपी होम इंस्टॉलेशन पर काम करता है, यूनिक्स तरीका:

call notepad.exe & 

7
मुझे लगता है कि यह केवल संयोग से काम करता है, और यह आवश्यक नहीं है।
सैम वॉटकिंस

2
हाँ, notepad.exe के साथ शुरू करने के लिए अतुल्यकालिक है।
एंटैक

0

वास्तव में अंत में इस विकल्प के साथ काफी आसान है:

c: \ start BATCH.bat -WindowStyle हिडन


विंडोज कमांड startमें -WindowStyleविकल्प नहीं है ।
Stephan

@ स्टेफ़न अर्रीड। विषम पथ ( C:` instead of C: \ Windows`) बताता है कि उसे इंटरनेट पर कहीं एक उपकरण मिला और उसकी हार्ड ड्राइव पर कॉपी किया गया।
आरोन दिगुल्ला
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.