मैं एक बैच स्क्रिप्ट को बैच स्क्रिप्ट के भीतर कैसे चला सकता हूं?


97

मैं बैच स्क्रिप्ट के भीतर से दूसरी बैच स्क्रिप्ट कैसे कह सकता हूं?

मैं चाहता हूं कि यह एक ifवक्तव्य में निष्पादित हो ।

जवाबों:


219

में के CALLरूप में उपयोग करें

CALL nameOfOtherFile.bat

यह वर्तमान बैच फ़ाइल के निष्पादन को रोक देगा (रोक देगा), और यह तब तक प्रतीक्षा करेगा जब तक CALLएड एक पूरा नहीं हो जाता।

यदि आप इसे ब्लॉक नहीं करना चाहते हैं, तो STARTइसके बजाय उपयोग करें ।

Cmd प्रॉम्प्ट का उपयोग करके CALL /?या उस से नॉटी-ग्रैटी विवरण START /?प्राप्त करें।


22

आप सिर्फ नाम से बैच स्क्रिप्ट को लागू कर सकते हैं, जैसे कि आप कमांड लाइन पर चल रहे हैं।

तो, मान लीजिए कि आपके पास एक फ़ाइल है bar.batजो कहती है echo This is bar.bat!और आप इसे एक फ़ाइल से कॉल करना चाहते हैं foo.bat, आप इसमें लिख सकते हैं foo.bat:

if "%1"=="blah" bar

foo blahकमांड लाइन से चलाएं , और आप देखेंगे:

C:\>foo blah

C:\>if "blah" == "blah" bar

C:\>echo This is bar.bat!
This is bar.bat!

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

if "%1"=="blah" call bar
echo That's all for foo.bat!

यदि आप foo blahउस पर चलते हैं , तो आप देखेंगे:

C:\>foo blah

C:\>if "blah" == "blah" call bar

C:\>echo This is bar.bat!
This is bar.bat!

C:\>echo That's all for foo.bat!
That's all for foo.bat!


2

आप उपयोग कर सकते हैं

call script.bat

या केवल

script.bat

5
यदि आप अपनी स्क्रिप्ट के भीतर किसी अन्य स्क्रिप्ट को सीधे कॉल करते हैं, तो यदि स्क्रिप्ट में कोई भी कमांड नॉन-जीरो वैल्यू (एरर) देता है, तो कैली स्क्रिप्ट स्क्रिप्ट को एग्जीक्यूट करना बंद कर देगी, जहां callयूज करने पर वह एरर के साथ भी अपनी एक्जेक्यूट जारी रखेगा। कहा जाता है स्क्रिप्ट में।
ब्रूनो फिंगर

1

यहाँ उदाहरण है:

आपके पास a.bat है:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END

और b.bat को सशर्त रूप से a.bat कहा जाता है:

@echo off 
echo "This is b.bat"

1

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

start batch.bat
start call batch.bat
start cmd /c batch.bat

यदि आप स्क्रिप्ट को समाप्त करने के लिए इंतजार करना चाहते हैं, तो प्रयास करें start /w call batch.bat, लेकिन बैच.बेट को समाप्त करना होगा exit


क्या इनमें से प्रत्येक स्क्रिप्ट से मुख्य स्क्रिप्ट के आउटपुट में सभी त्रुटियों को पाइप करने का एक तरीका है?
गनलिंगलर

0

समानांतर रूप से अलग-अलग कमांड विंडो पर न्यूनतम स्थिति में चलाएं

dayStart.bat

start "startOfficialSoftwares" /min cmd /k call startOfficialSoftwares.bat
start "initCodingEnvironment" /min cmd /k call initCodingEnvironment.bat
start "updateProjectSource" /min cmd /k call updateProjectSource.bat
start "runCoffeeMachine" /min cmd /k call runCoffeeMachine.bat

क्रमिक रूप से एक ही विंडो पर चलाएँ

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat

-3

हुह, मुझे पता नहीं क्यों, लेकिन कॉल नहीं
call script.batकिया था चाल मूल कंसोल पर वापस नहीं आई।
cmd /k script.batमूल कंसोल पर वापस लौटा।


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