Cmd बैच फ़ाइल के निष्पादन के बाद बाहर क्यों नहीं जाएगा?


25

Cmd बैच फ़ाइल के निष्पादन के बाद बाहर क्यों नहीं जाएगा?

मैंने कोशिश की है:

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

तथा

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

जवाबों:


31

यदि जावा ऐप समाप्त नहीं होता है (जैसे आप जावा ऐप लॉन्च करने के लिए बैच फ़ाइल का उपयोग कर रहे हैं), तो startइसे लॉन्च करने के लिए कमांड का उपयोग करें : -

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

यह जावा ऐप लॉन्च करेगा और जावा ऐप के खत्म होने तक इंतजार किए बिना बैच फ़ाइल को निष्पादित करेगा।


20

स्पष्टीकरण:

यहाँ दिया गया है कि यह कैसे काम करता है; बैच फ़ाइल को एक बार में एक पंक्ति में संसाधित किया जाता है। प्रत्येक कमांड को बारी-बारी से निष्पादित किया जाता है और अगले शुरू करने से पहले बैच प्रोसेसर एक कमांड के समाप्त होने की प्रतीक्षा करता है। जो समस्या आप अनुभव कर रहे हैं, क्योंकि जावा एप्लिकेशन जो आप लॉन्च कर रहे हैं (Jilko.jar) एक विंडो प्रोग्राम है जो इसे लॉन्च करने वाली लाइन के बाद भी चलता रहता है। यदि यह एक उपकरण था जो कुछ कार्रवाई करता है और फिर समाप्त हो जाता है, तो बैच फ़ाइल अगले कमांड पर जारी रहेगी (या यदि कोई अधिक नहीं है तो बाहर निकलें)। क्योंकि प्रोग्राम अभी भी चल रहा है, बैच प्रोसेसर तब तक प्रतीक्षा करता है जब तक कि विंडो को आगे बढ़ने से पहले बंद नहीं किया जाता है। आप जावा प्रोग्राम से बाहर निकलकर इसे एक्शन में देख सकते हैं: बैच फ़ाइल के साथ कंसोल विंडो तब बंद हो जाती है।


समाधान:

इसे ठीक करने के लिए आपको क्या करने की आवश्यकता है, बैच प्रोसेसर को प्रोग्राम लॉन्च करने का निर्देश देना है और इस तरह इंतजार किए बिना जारी रखना है:

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

जैसा कि टेरेन्स ने उल्लेख किया है , ""कंसोल विंडो के लिए उपयोग करने के लिए शीर्षक है। हालाँकि यह केवल वैकल्पिक है यदि कमांड उद्धरण में नहीं है; अन्यथा आवश्यक है । यदि आप इसे पसंद करते हैं या इसे खाली छोड़ते हैं, तो आप इसमें कुछ डाल सकते हैं, लेकिन यदि कमांड उद्धरण में है, तो यह मौजूद होना चाहिए, अन्यथा कमांड-इंटरप्रेटर उद्धृत कमांड को शीर्षक के रूप में मानेंगे और एक कंसोल खोलेंगे जो बस वहां बैठे इंतजार कर रहे हैं कुछ करने के लिए।

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

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

startआदेश है निर्मित एक आदेश है कि spawns एक प्रक्रिया (मूल रूप से प्रारंभ मेनू से एक कार्यक्रम चलाने की तरह)। तो इस संदर्भ में क्या होता है कि बैच प्रोसेसर startकमांड चलाता है जो बदले में निर्दिष्ट प्रोग्राम चलाता है और समाप्त हो जाता है (स्वयं, स्पॉन प्रोग्राम नहीं)। जैसे, बैच प्रोसेसर उम्मीद के मुताबिक जारी है। इसके कुछ विकल्प भी हैं जो उपयोगी हो सकते हैं जैसे कि प्रोग्राम को कम से कम ( /minया अधिकतम /max) चलाने पर, इसे कम प्राथमिकता में चलाना ( /low) और इसी तरह। start /?विवरण के लिए देखें।



जब तक आप nohup और & के साथ तुलना नहीं करना चाहते हैं।
हेन्नेस

7

मैंने पाया है कि मेरे द्वारा चलाए जाने वाले कार्यक्रमों में से कुछ रनिंग प्रक्रियाओं को छोड़ देते हैं, और कंसोल विंडो तब तक बंद नहीं होगी जब तक कि मैं समाप्त नहीं करता अगर मैं उन्हें निष्पादन योग्य लॉन्च करके चलाऊं।

START प्रोग्राम ठीक करता है, लेकिन START के साथ पुरानी समस्या अभी भी है। आप सिर्फ उपयोग नहीं कर सकते:

START "c:\my dir\myfile.exe"

START का पहला पैरामीटर अभी भी विंडो नाम है। यदि आप इसे छोड़ देते हैं, तो आप बस उस सीएमडी कंसोल बॉक्स को खोल सकते हैं जिसका नाम आपने लॉन्च करने की कोशिश की है। उपरोक्त उदाहरण में, अब मेरे पास " c: \ my dir \ myfile.exe " की विंडो शीर्षक के साथ एक कंसोल विंडो होगी । मैं जो चाहता था नहीं!

खिड़की के नाम को छोड़ने के लिए, खाली स्ट्रिंग को परिभाषित करने के लिए बस दोहरे उद्धरण चिह्नों का उपयोग करें:

START "" "c:\my dir\myfile.exe"

अंत में, यह बंद करने के लिए एक EXIT कमांड के साथ अपनी बैच फ़ाइल को समाप्त करें।

यह विधि विंडोज 7 और 8 में लगातार काम करती है।

समस्या निवारण के लिए, मुझे लगता है कि मैं जो करने जा रहा हूं, उसका एक ईसीएचओ जोड़ रहा हूं, फिर जो मैंने अभी किया, उसका एक समय बहुत मदद करता है। उदाहरण के लिए:

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

चूंकि टाइमआउट आपको उलटी गिनती देता है, इसलिए आपको ECHO की आवश्यकता नहीं है कि आप देरी करने वाले हैं।


5

इसके अलावा - विंडोज 7 के तहत हर समय EXIT का उपयोग करें , जैसा कि बैच फ़ाइल के अंत में हो रहा है, जरूरी नहीं कि इसे समाप्त कर दिया जाए - जैसा कि पहले के विंडोज संस्करणों में था। विंडोज 7 इस के लिए अधिक संवेदनशील हो सकता है कि पहले के NT संस्करण (जैसे Windows 2000 Professional)। यह कुछ में उल्लेख किया गया था, लेकिन पिछले उत्तरों के सभी नहीं

उत्तर का समर्थन करने के लिए व्यक्तिगत अनुभव का विवरण:

विंडोज 2000 से विंडोज 7 में StarOffice5.2 इंस्टॉलेशन को स्थानांतरित करने के बाद, मुझे सुइट को समाप्त करने पर मेमोरी स्पेस की त्रुटियां हो रही थीं। यह विंडोज 2000 में नहीं देखा गया था।

बरसों पहले, मैंने स्वचालित रूप से बैक-अप और soffice.ini को पुनर्स्थापित करने के लिए बैच फ़ाइलों को लिखा था, जब यह दूषित हो जाता है तो मरम्मत की अनुमति देने के लिए (अक्सर एक समस्या के लिए पर्याप्त है - सूट लोड करने में विफल रहता है)। स्वत: बैकअप (Office52 \ user \ config \ स्टार्टअप में रखा बैच फ़ाइल के लिए एक कड़ी से शुरू) केवल 5-सेकंड की देरी के बाद के बारे में होता है। मैंने देखा कि जब भी मैं बैच फ़ाइल चलाने से पहले सुइट से बाहर निकलता हूं, तो सुइट की समाप्ति बिना किसी त्रुटि के हुई। यह मुझे बैच फ़ाइलों में एक समस्या की ओर इशारा किया।

बैच फ़ाइलों पर 'EXIT' कमांड को अंतिम पंक्ति के रूप में रखे जाने के बाद, ऑफिस सूट मेमोरी टाइम-एरर मैसेजेस के बिना समाप्त होना शुरू हो गया, हर समय, चाहे बैच फाइल्स चल पड़ी हों या नहीं।


2

एक बार जब एप्लिकेशन किया जाता है, तो उसे बाहर निकलना चाहिए। क्या आप वाकई जावा ऐप ठीक से बाहर निकल रहे हैं?


2

मैं बस एक ही समस्या से निपट रहा था, और आखिरकार यह खुद को हल कर लिया कि बैचफाइल में बेतरतीब बदलाव जैसा क्या लग रहा था- मुझे समझ नहीं आ रहा है लेकिन मैं इसे यहाँ पोस्ट करूँगा क्योंकि यह बाद में किसी और की मदद करता है।

मैं SysInternals Pskill उपयोगिता और नींद की उपयोगिता का उपयोग करता हूं क्योंकि XP ​​होम कमांडलाइन कार्यक्षमता के मामले में बहुत अधिक शामिल नहीं है।


यह बैचफाइल है जो इसके पूरा होने के बाद वास्तव में बंद हो जाता है:

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit

अगर मेरी पिछली कुछ लाइनें इस तरह से बदल जातीं, तो cmd विंडो तब तक खुली रहती, जब तक मैं कोने में 'X' पर क्लिक नहीं करता:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit

यहां तक ​​कि जब मैंने खुद को मारने के लिए pskill को आमंत्रित करने का प्रयास किया, तो cmd.exe प्रक्रिया टास्क मैनेजर से गायब हो जाएगी, और pskill अंदर से रिपोर्ट करेगी कि cmd.exe प्रक्रिया है कि cmd.exe प्रक्रिया को मार दिया गया था, फिर भी cmd.exeविंडो तब तक बनी रहेगी। मैंने कोने में 'X' पर क्लिक किया:

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

जब मैं && exitहर लाइन में शामिल हो गया, तो मैंने देखा कि उनमें से कुछ ने इसका जवाब दिया और बैच प्रोसेसिंग को बाधित करेंगे- जबकि अन्य नहीं करेंगे।

इसलिए मैंने केवल एक उत्तरदायी व्यक्ति को अंत में रखा, बजाय इसके कि मैं मूल रूप से कैसा था।

जैसा कि मैंने कहा, मुझे नहीं पता कि क्यों, लेकिन मुझे खुशी है कि यह खत्म हो गया है।


1
यह कितना अनावश्यक है
सर्फस

मेरे लिए && निकास कार्य
jekcom


0

यहाँ देखें कि मैंने यह कैसे किया:

  1. निम्नलिखित सामग्री के साथ एक बैच फ़ाइल बनाएँ:

    java -Xms512M -Xmx512M -jar yourFileName.jar -o true
    EXIT
    
  2. अपने एक्जिट इनपुट स्ट्रीम में, जोड़ें:

    System.exit(1);
    

0

Windows 2003 में डिफ़ॉल्ट रूप से नियंत्रण कक्ष में कोई "उपयोगकर्ता खाते" नहीं है। मैंने उपयोगकर्ता खाते खोलने के लिए एक छोटा बैच लिखा है:

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

इसने ठीक काम किया, उपयोगकर्ता खाते खोले गए, लेकिन CMD विंडो भी खुली रही। यहाँ कुछ शोध के बाद, मैंने जोड़ा: "" पंक्ति 2 की शुरुआत में ऐसा है:

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

अब उपयोगकर्ता खाता विंडो खुलता है, खुला रहता है और CMD विंडो बंद हो जाती है। बहुत आसान।


0

मैं एक बैच फ़ाइल विंडो को बंद करने के लिए एक समाधान के लिए खोज और खोज रहा हूं जब EXIT आदेश अज्ञात कारण के लिए विंडो को खुला छोड़ देता है। मैं अंत में एक समाधान पर ठोकर खाई।

बैच फ़ाइल के अंत से बाहर निकलें और उपयोग करें:

Taskkill /IM conhost.exe /F

0

मैंने विंडोज 7 32-बिट मशीन पर एक नेट उपयोग बैच फ़ाइल बनाई और निष्पादन के बाद बैच फ़ाइल का cmd बाहर नहीं निकलेगा। मैं समान बैच फ़ाइल को किसी अन्य विंडोज 7 64-बिट मशीन पर चलाता हूं और सामान्य रूप से बैच फ़ाइल से बाहर निकलने का सेमी।

मैंने ब्रायन के सुझाव की कोशिश की और यह उस विंडोज 7 32-बिट मशीन पर काम नहीं करता है क्योंकि कोई conhost.exe प्रक्रिया नहीं थी इसलिए मैंने इसे इस प्रकार संशोधित किया:

Taskkill /IM cmd.exe /F

नेट उपयोग बैच फ़ाइल हमेशा सामान्य रूप से बाहर नहीं निकलती है और यह "टर्मिनेट बैच जॉब (Y / N)" की पुष्टि बेतरतीब ढंग से दिखाती है ।

इस सूत्र के अनुसार मैंने बैच फ़ाइल को इस प्रकार संशोधित किया है:

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \\Server\folder

Taskkill /IM cmd.exe /F

नेट उपयोग बैच फ़ाइल अंततः सामान्य रूप से बाहर निकलती है।

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