CALL कमांड बनाम START / WAIT विकल्प के साथ


149

एक WAIT विकल्प के साथ START कमांड कैसे है

START /wait notepad.exe 
START /wait  notepad.exe 

... एक कॉल आदेश का उपयोग करने से अलग है?

CALL notepad.exe 
CALL notepad.exe 

क्या ऐसी स्थिति है जहां कोई अलग व्यवहार कर सकता है कि दूसरा उस पर निर्भर है जिसे निष्पादित किया जा रहा है?


2
ले लो पर एक नज़र technet.microsoft.com/en-us/library/bb491005.aspx है के बारे में स्टार्ट और technet.microsoft.com/en-us/library/bb490873.aspx के बारे में कहते हैं
डेवलपर

जवाबों:


183

के लिए exe फ़ाइलों, मैं मतभेद लगभग महत्वहीन हैं लगता है।
लेकिन एक exe शुरू करने के लिए आपको जरूरत भी नहीं है CALL

दूसरे बैच को शुरू करते समय यह एक बड़ा अंतर है,
जैसा CALLकि इसे एक ही विंडो में शुरू किया जाएगा और तथाकथित बैच में समान चर संदर्भ तक पहुंच होगी।
तो यह चर को भी बदल सकता है जो कॉलर को प्रभावित करता है।

STARTनामक बैच के लिए एक नया cmd.exe बनाएगा और इसके बिना / b यह एक नई विंडो खोलेगा।
जैसा कि यह एक नया संदर्भ है, चर साझा नहीं किए जा सकते।

मतभेद

उपयोगstart /wait <prog>
- <prog>समाप्त होने पर पर्यावरण चर का परिवर्तन खो जाता है
- कॉलर समाप्त होने तक प्रतीक्षा करता <prog>है

उपयोग करनाcall <prog>
- exe के लिए इसे ommited किया जा सकता है, क्योंकि यह सिर्फ शुरू करने के बराबर है <prog>
- exe-prog के लिए कॉलर बैच इंतजार करता है या exe अतुल्यकालिक शुरू करता है, लेकिन व्यवहार exe पर ही निर्भर करता है।
- बैच फ़ाइलों के लिए, कॉलर बैच जारी रहता है, जब कॉल <batch-file>खत्म हो जाता है , कॉल के बिना नियंत्रण कॉलर बैच पर वापस नहीं आएगा

परिशिष्ट:

उपयोग CALLकरने से पैरामीटर बदल सकते हैं (बैच और exe फ़ाइलों के लिए), लेकिन केवल तभी जब उनमें कैरेट या प्रतिशत संकेत हों।

call myProg param1 param^^2 "param^3" %%path%%

में विस्तारित किया जाएगा (एक बैच फ़ाइल के भीतर से)

myProg param1 param2 param^^3 <content of path>

25
जब आप START / WAIT का उपयोग करके किसी file.bat को निष्पादित करते हैं, तो आपको START / WAIT cmd / c "file.bat" को केवल START / WAIT "file.bat" के बजाय निर्दिष्ट करना होगा, अन्यथा file.bat के लिए बनाई गई cmd विंडो खुली रहेगी
फ्रिंकTheBrave

5
आप CALL और START के बीच की तुलना: ss64.com/nt/start.html ("प्रारंभ / प्रतीक्षा" और "START vs CALL" अनुभागों के साथ आज अपडेट करें)
अल्फ्रेडो कैपोबियानी

मेरा पसंदीदा है start /wait /b cmd /c <batchfile.bat>क्योंकि बैच फाइलें एक के बाद एक कमांड विंडो में
चलती

@ linux64kb, लेकिन बैच फ़ाइलों के लिए यह आवश्यक नहीं है, आपको केवल आवश्यकता हैcall batchfile.bat
jeb

@ जैब ट्रू मैं इसे पसंद करता हूं, क्योंकि प्रत्येक बैच फ़ाइल एक अलग कमांड शेल एनवायरमेंट में चलेगी, कॉलिंग शेल से वेरिएबल्स को इनहेरिट करना और बैच समाप्त होने के बाद प्रारंभिक मानों में परिवर्तन खो जाएगा -> प्रत्येक लगातार चलाने के बाद कोई कचरा वहां नहीं छोड़ा गया। एक और जीत यह है, कि आपको अपनी लिपियों में परिवर्तनशील चर से निपटना नहीं है।
linux64kb

17

मुझे लगता है कि उन्हें आम तौर पर एक ही प्रदर्शन करना चाहिए, लेकिन कुछ अंतर हैं। STARTआमतौर पर अनुप्रयोगों को शुरू करने के लिए या किसी दिए गए फ़ाइल प्रकार के लिए डिफ़ॉल्ट एप्लिकेशन को शुरू करने के लिए उपयोग किया जाता है। इस तरह अगर आप START http://mywebsite.comऐसा नहीं करते हैं START iexplore.exe http://mywebsite.com

START myworddoc.docxMicrosoft Word शुरू करेंगे और myworddoc.docx खोलेंगे। CALL myworddoc.docxएक ही बात करता है ... हालांकि STARTखिड़की की स्थिति और उस प्रकृति की चीजों के लिए अधिक विकल्प प्रदान करता है। यह प्रक्रिया की प्राथमिकता और आत्मीयता को स्थापित करने की भी अनुमति देता है।

संक्षेप में, प्रारंभ द्वारा प्रदान किए गए अतिरिक्त विकल्प को देखते हुए, यह आपकी पसंद का उपकरण होना चाहिए।

START ["title"] [/D path] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED]
  [/LOW | /NORMAL | /HIGH | /REALTIME | /ABOVENORMAL | /BELOWNORMAL]
  [/NODE <NUMA node>] [/AFFINITY <hex affinity mask>] [/WAIT] [/B]
  [command/program] [parameters]

"title"     Title to display in window title bar.
path        Starting directory.
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.
I           The new environment will be the original environment passed
            to the cmd.exe and not the current environment.
MIN         Start window minimized.
MAX         Start window maximized.
SEPARATE    Start 16-bit Windows program in separate memory space.
SHARED      Start 16-bit Windows program in shared memory space.
LOW         Start application in the IDLE priority class.
NORMAL      Start application in the NORMAL priority class.
HIGH        Start application in the HIGH priority class.
REALTIME    Start application in the REALTIME priority class.
ABOVENORMAL Start application in the ABOVENORMAL priority class.
BELOWNORMAL Start application in the BELOWNORMAL priority class.
NODE        Specifies the preferred Non-Uniform Memory Architecture (NUMA)
            node as a decimal integer.
AFFINITY    Specifies the processor affinity mask as a hexadecimal number.
            The process is restricted to running on these processors.

            The affinity mask is interpreted differently when /AFFINITY and
            /NODE are combined.  Specify the affinity mask as if the NUMA
            node's processor mask is right shifted to begin at bit zero.
            The process is restricted to running on those processors in
            common between the specified affinity mask and the NUMA node.
            If no processors are in common, the process is restricted to
            running on the specified NUMA node.
WAIT        Start application and wait for it to terminate.

11

उदाहरण के लिए कॉल करते समय callऔर बीच में एक उपयोगी अंतर होता है , गैरी द्वारा अपने उत्तर में यह भी बताया गया है कि कैसे-कैसे-मैं-एक-से-बाहर निकलें-कोड-से-एक-विंडोज-कमांड-लाइनstart /waitregsvr32.exe /s

call regsvr32.exe /s broken.dll
echo %errorlevel%

हमेशा 0 पर लौटेगा

start /wait regsvr32.exe /s broken.dll
echo %errorlevel%

regsvr32.exe से त्रुटि स्तर वापस करेगा


8

समानांतर में बैच फ़ाइलों को चलाते समय मैंने यही पाया है (विभिन्न इनपुट मापदंडों के साथ एक ही समय में एक ही बैट फ़ाइल के कई उदाहरण):

कहते हैं कि आपके पास एक exe फ़ाइल है जो LongRunningTask.exe नामक एक लंबा कार्य करती है

यदि आप exe को सीधे बैट फ़ाइल से कॉल करते हैं, तो केवल LongRunningTask पर पहला कॉल सक्सेस होगा, जबकि बाकी को OS एरर मिलेगा "फाइल प्रोसेस के द्वारा पहले से ही उपयोग में है"

यदि आप इस कमांड का उपयोग करते हैं:

प्रारंभ / B / WAIT "" "LongRunningTask.exe" "पैरामीटर"

आप बल्ले के कई उदाहरणों को चलाने में सक्षम होंगे, जबकि अभी भी कार्य समाप्त होने तक प्रतीक्षा करने से पहले बल्ले को शेष कमांडों को निष्पादित करना जारी रहेगा। / B विकल्प दूसरी विंडो बनाने से बचने के लिए है, काम करने के लिए खाली कोट्स की जरूरत है, नीचे संदर्भ देखें।

ध्यान दें कि यदि आप प्रारंभ में / WAIT का उपयोग नहीं करते हैं, तो LongRunningTask बैच फ़ाइल में शेष कमांड की तुलना में एक ही समय में निष्पादित किया जाएगा, इसलिए यह समस्या पैदा कर सकता है यदि इनमें से किसी एक कमांड को LongRetTask के आउटपुट की आवश्यकता होती है

फिर से शुरू:

यह समानांतर में नहीं चल सकता:

  • LongRunningTask.exe पर कॉल करें

यह समानांतर में चलेगा और ठीक रहेगा जहां तक ​​कमांड के आउटपुट और बाकी बैट फाइल के बीच कोई डेटा निर्भरता नहीं है:

  • start / B "" "LongRunningTask.exe" "पैरामीटर"

यह समानांतर में चलेगा और कार्य समाप्त होने की प्रतीक्षा करेगा, इसलिए आप आउटपुट का उपयोग कर सकते हैं:

  • प्रारंभ / B / WAIT "" "LongRunningTask.exe" "पैरामीटर"

स्टार्ट कमांड का संदर्भ: मैं प्रोग्राम शुरू होने के बाद कंसोल को खुले बिना बैच फ़ाइल से प्रोग्राम कैसे चला सकता हूं?


6

कॉल

मूल बैच प्रोग्राम को रोकने के बिना एक बैच प्रोग्राम को दूसरे से कॉल करता है कॉल कमांड कॉल को लक्ष्य के रूप में स्वीकार करता है। स्क्रिप्ट या बैच फ़ाइल के बाहर उपयोग किए जाने पर कमांड-लाइन पर कॉल का कोई प्रभाव नहीं पड़ता है। https://technet.microsoft.com/en-us/library/bb490873.aspx

शुरू

एक निर्दिष्ट प्रोग्राम या कमांड चलाने के लिए एक अलग कमांड प्रॉम्प्ट विंडो शुरू करता है । मापदंडों के बिना उपयोग किया जाता है, प्रारंभ एक दूसरा कमांड प्रॉम्प्ट विंडो खोलता है। https://technet.microsoft.com/en-us/library/bb491005.aspx


-1

यह एक पुराना धागा है, लेकिन मैंने अभी इस स्थिति का सामना किया है और इसके आस-पास एक साफ-सुथरा रास्ता खोजा है। मैं एक setup.exe चलाने की कोशिश कर रहा था, लेकिन ध्यान केंद्रित करने के लिए setup.exe की प्रतीक्षा किए बिना स्क्रिप्ट की अगली पंक्ति पर वापस लौट रहा था। मैंने बिना किसी भाग्य के उपरोक्त समाधानों की कोशिश की।

अंत में, अधिक के माध्यम से कमांड को पाइपिंग ने किया।

setup.exe {तर्क} | अधिक

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