Perché cmd non verrà chiuso dopo l'esecuzione del file batch?

Perché cmd non verrà chiuso dopo l'esecuzione del file batch?

Ho provato:

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

e

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

Se l'applicazione Java non viene terminata (ad esempio si utilizza il file batch per avviare l'applicazione Java), utilizzare il command di avvio per start : –

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

Questo avvierà l'applicazione java e prosegue l'esecuzione del file batch senza aspettare l'applicazione java per finire.

Spiegazione:

Ecco come funziona; un file batch viene elaborato una row alla volta. Ogni command viene eseguito a sua volta e il processre batch aspetta che un command finisca prima di avviare il successivo. Il problema che si sta verificando è perché l'applicazione Java che si sta lanciando (Jilko.jar) è un programma window che continua a funzionare anche dopo la row che lo lancia. Se fosse uno strumento che esegue un'azione e quindi termina, il file batch continuerà al command successivo (o esce se non ci sono più). Poiché il programma è ancora in esecuzione, il processre batch si attende fino alla chiusura della window prima di passare. È ansible vedere questo in azione uscendo dal programma Java: la window della console con il file batch si chiude quindi.

Soluzione:

Quello che devi fare per risolverlo è quello di istruire il processre batch per avviare il programma e continuare senza aspettare come tale:

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

Come ha detto Terrance , "" è il titolo da utilizzare per la window della console. Tuttavia è solo opzionale se il command non è in virgolette; altrimenti è necessario . Potete mettere qualcosa in quel luogo se vuoi o lasciatelo vuoto, ma se il command è in virgolette, deve essere presente, altrimenti l'interpnetworking command tratterà il command citato come titolo e apre una console che si trova seduta in attesa qualcosa da fare.

È ansible utilizzare qualcosa il command seguente, ma le virgolette sono semplicemente più semplici e sicure poiché le abbreviazioni non sono garantite per essere uguali in each sistema.

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

Il command di start è un command incorporato che spawn un process (fondamentalmente come eseguire un programma dal menu Start). Quindi ciò che accade in questo context è che il processre batch esegue il command di start che a sua volta gestisce il programma specificato e termina (in sé, non il programma generato). In quanto tale, il processre batch continua come previsto. Esso dispone anche di alcune opzioni utili per eseguire il programma ridotto ( /min ) o massimizzato ( /max ), eseguendolo a bassa priorità ( /low ) e così via. Vedi start /? per dettagli.

Ho scoperto che alcuni programmi che lancio lanciano i processi in esecuzione e la window della console non si chiuderà finché non si terminano se li esegui correndo lanciando l'eseguibile.

Il programma START risolve questo problema, ma il vecchio problema con START è ancora in giro. Non puoi solo usare:

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

Il primo parametro di START è ancora il nome della window. Se lo ometti, apri appena una casella di console CMD con la window denominata che cosa hai provato a lanciare. Nell'istanza precedente, avrei ora una window di console con il titolo della window di " c: \ my dir \ myfile.exe ". Non quello che volevo!

Per ignorare il nome della window, utilizzare solo una coppia di virgolette doppie per definire una string vuota, ad esempio:

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

Infine, terminare il file batch con un command EXIT per assicurarsi che sia chiuso.

Questo metodo sembra funzionare coerentemente in Windows 7 e 8.

Per la risoluzione di problemi, trovo che aggiungere un ECHO di quello che sto per fare, poi un TIMEOUT di quello che ho appena fatto, aiuta molto. Per esempio:

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

Poiché il Timeout ti dà un conto alla rovescia, non hai bisogno di ECHO che stai per ritardare.

Inoltre – usa sempre EXIT , in Windows 7, solo che arriva alla fine del file batch non lo termina necessariamente – come nelle versioni precedenti di Windows. Windows 7 potrebbe essere più sensibile a ciò che le precedenti versioni NT (ad es. Windows 2000 Professional). Questo è stato menzionato in alcune, ma non tutte le risposte precedenti.

Dettagli dell'esperienza personale per sostenere la risposta:

Dopo aver trasferito un'installazione di StarOffice5.2 da Windows 2000 a Windows 7, ho avuto errori nello spazio di memory quando terminai la suite. Questo non è stato visto in Windows 2000.

Anni fa ho scritto file batch per eseguire automaticamente il backup e il ripristino di soffice.ini, per consentire una riparazione quando si danneggia (spesso sufficiente per essere un problema – la suite non riesce a caricare). Il backup automatico (triggersto da un collegamento al file batch, posizionato in Office52 \ user \ config \ startup) si verifica solo dopo un ritardo di 5 secondi. Ho notato quando sono uscito dalla suite appena prima che il file batch sia stato eseguito, la risoluzione della suite è andata senza errori. Questo mi ha indicato un problema nei file batch.

Dopo che il command "EXIT" è stato inserito come ultima row nei file batch, la suite di Office ha iniziato a terminare senza i messaggi di errore dello spazio di memory in qualsiasi momento, indipendentemente dal fatto che i file batch siano stati eseguiti o less.

Una volta che l'applicazione è stata completata, dovrebbe uscire. Sei sicuro che l'applicazione Java esce correttamente?

Stavo solo affrontando lo stesso problema, e finalmente si è risolto dopo aver fatto quello che sembrava cambiamenti casuali nel file di batch – non capisco perché, ma lo pubblicherò qui nel caso in cui aiuta qualcun altro in seguito.

Utilizzo l'utility SysInternals Pskill e l'utilità di sleep poiché XP Home non include molto in termini di funzionalità di row di command.


Questo è il file di batch che veramente si chiude dopo che è stato fatto:

 @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 

Se avessi cambiato le ultime linee così, la window cmd sarebbe rimasta aperta fino a quando non ho scattato l'angolo "X"

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

Anche quando ho cercato di invocare pskill per uccidere se stesso, il process cmd.exe scomparirebbe da Task Manager e pskill avrebbe riportto dentro di esso cmd.exe che il process cmd.exe era stato ucciso, ma la window cmd.exe sarebbe ancora rimani fino a quando non ho scattato l'angolo "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 

Dopo aver aggiunto && exit a each row, ho notato che alcuni di loro hanno risposto e interromperebbero l'elaborazione batch – mentre altri non lo farebbero.

Quindi ho messo una delle risposte alla fine invece di come l'avevo originariamente.

Come ho detto, non so perché, ma sono contento che sia finito.

provare:

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

Ecco come ho fatto:

  1. Creare un file batch con i seguenti contenuti:

     java -Xms512M -Xmx512M -jar yourFileName.jar -o true EXIT 
  2. All'interno del stream di input di output, aggiungere:

     System.exit(1); 

Per impostazione predefinita, Windows 2003 non dispone di "Account utente" nel Pannello di controllo. Ho scritto un batch breve per aprire account utente:

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

Ha funzionato bene, gli account utente sono stati aperti, ma la window CMD è rimasta aperta. Dopo alcune ricerche qui, ho aggiunto: START "" all'inizio della row 2 come così:

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

Ora si apre la window Account utente, rimane aperta e la window CMD si chiude. Vai tranquillo.

Ho cercato e cercato una soluzione per chiudere una window di file batch quando il command EXIT lascia la window aperta per una ragione sconosciuta. Finalmente ho imbattuto in una soluzione.

Rimuovere EXIT dalla fine del file batch e utilizzare:

 Taskkill /IM conhost.exe /F 

Ho creato un file batch di utilizzo netto in una macchina Windows a 32 bit e il cmd del file batch non esce dopo l'esecuzione. Faccio eseguire lo stesso file batch su un'altra macchina Windows a 64 bit e il cmd del file batch esce normalmente.

Ho provato il suggerimento di Bryan e non funziona su quella macchina Windows a 32 bit perché non c'era nessun process conhost.exe e ho modificato come segue:

 Taskkill /IM cmd.exe /F 

Il file batch di utilizzo netto non sempre esce normalmente e mostra la conferma "Terminate il lavoro batch (Y / N)" in modo random .

Secondo questo thread ho modificato il file batch come segue:

 @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 

Il file batch di utilizzo netto alla fine esce normalmente.