2010-09-25 04:19:24 +0000 2010-09-25 04:19:24 +0000
25
25

Perché cmd non esce dopo l'esecuzione del file batch?

Perché cmd non esce 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

Risposte (11)

31
31
31
2010-09-25 07:28:36 +0000

Se l'applicazione Java non termina (ad esempio stai usando il file batch per lanciare l'applicazione Java), allora usa il comando start per lanciarla:-

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

Questo lancerà l'applicazione Java e continuerà ad eseguire il file batch senza aspettare che l'applicazione Java termini.

20
20
20
2012-01-26 01:17:52 +0000

Spiegazione:

Ecco come funziona: un file batch viene elaborato una riga alla volta. Ogni comando viene eseguito a turno e il processore batch aspetta che un comando finisca prima di iniziare il successivo. Il problema che stai riscontrando è perché l'applicazione Java che stai lanciando (Jilko.jar) è un programma in finestra che continua a funzionare anche dopo la riga che lo lancia. Se fosse uno strumento che esegue qualche azione e poi termina, il file batch continuerebbe al comando successivo (o uscirebbe se non ce ne sono altri). Poiché il programma è ancora in esecuzione, il processore batch aspetta che la finestra venga chiusa prima di andare avanti. Potete vederlo in azione uscendo dal programma Java: la finestra della console con il file batch si chiude.

Soluzione:

Quello che dovete fare per risolvere il problema, è istruire il processore batch a lanciare 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 , lo "" è il titolo da usare per la finestra della console. Tuttavia è solo opzionale se il comando non è tra virgolette; altrimenti è richiesto. Puoi metterci qualcosa se vuoi o lasciarlo vuoto, ma se il comando è tra virgolette, deve essere presente, altrimenti l'interprete dei comandi tratterà il comando tra virgolette come il titolo e aprirà una console che se ne sta lì ad aspettare qualcosa da fare.

Potete invece usare qualcosa come il seguente comando, ma le virgolette sono solo più facili e sicure dato che non è garantito che i nomi brevi siano gli stessi su ogni sistema.

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

Il comando start è un comando integrato che genera un processo (fondamentalmente come eseguire un programma dal menu Start). Quindi ciò che accade in questo contesto è che il processore batch esegue il comando start che a sua volta esegue il programma specificato e termina (se stesso, non il programma generato). Come tale, il processore batch continua come previsto. Ha anche alcune opzioni che possono essere utili come eseguire il programma minimizzato (/min) o massimizzato (/max), eseguirlo a bassa priorità (/low) e così via. Vedere start /? per i dettagli.

7
7
7
2013-05-15 23:43:30 +0000

Ho scoperto che alcuni dei programmi che lancio lasciano processi in esecuzione, e la finestra della console non si chiude finché non terminano se li eseguo semplicemente lanciando l'eseguibile.

Il programma START risolve questo problema, ma il vecchio problema con START è ancora presente. Non puoi semplicemente usare:

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

Il primo parametro di START è ancora il nome della finestra. Se lo omettete, aprite semplicemente una finestra della console CMD con il nome della finestra che avete provato a lanciare. Nell'esempio precedente, ora avrei una finestra della console con il titolo “c:\my dir\myfile.exe”. Non quello che volevo!

Per omettere il nome della finestra, basta usare una coppia di doppi apici per definire una stringa vuota, come:

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

Infine, termina il tuo file batch con un comando EXIT per assicurarti che si chiuda.

Questo metodo sembra funzionare costantemente in Windows 7 e 8.

Per la risoluzione dei problemi, trovo che aggiungere un ECHO di ciò che sto per fare, poi un TIMEOUT di ciò 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 vi dà un conto alla rovescia, non avete bisogno di ECHO che state per ritardare.

5
5
5
2012-01-26 00:59:18 +0000

Inoltre – usate EXIT in ogni momento, sotto Windows 7, dato che arrivare alla fine del file batch non lo termina necessariamente – come nelle precedenti versioni di Windows. Windows 7 può essere più sensibile a questo rispetto alle versioni NT precedenti (ad esempio Windows 2000 Professional). Questo è stato menzionato in alcune, ma non tutte le risposte precedenti.

Dettagli dell'esperienza personale a sostegno della risposta:

Dopo aver trasferito un'installazione di StarOffice5.2 da Windows 2000 a Windows 7, ottenevo errori di spazio in memoria al termine della suite. Questo non si vedeva in Windows 2000.

Anni fa, avevo scritto dei file batch per fare automaticamente il backup e ripristinare soffice.ini, per permettere una riparazione quando si corrompeva (abbastanza spesso da essere un problema - la suite non riesce a caricarsi). Il backup automatico (innescato da un link al file batch, posto in Office52\user\config\startup) avviene però solo dopo un ritardo di circa 5 secondi. Ho notato che ogni volta che esco dalla suite appena prima che il file batch venga eseguito, la terminazione della suite avviene senza errori. Questo mi ha indicato un problema nei file batch.

Dopo che il comando ‘EXIT’ è stato messo come ultima linea nei file batch, la suite per ufficio ha iniziato a terminare senza messaggi di errore dello spazio di memoria, in ogni momento, che i file batch fossero stati eseguiti o meno.

2
2
2
2010-11-06 03:27:04 +0000

Ho appena avuto a che fare con lo stesso problema, e alla fine si è risolto da solo dopo aver apportato quelle che sembrano modifiche casuali al file batch - non capisco perché, ma lo posterò qui nel caso in cui possa aiutare qualcun altro.

Faccio uso dell'utilità SysInternals Pskill e dell'utilità sleep poiché XP Home non include molto in termini di funzionalità della riga di comando.


Questo è il file batch che effettivamente si chiude quando ha finito:

@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 in questo modo, la finestra cmd rimarrebbe aperta fino a quando non clicco la ‘X’ nell'angolo:

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

Anche quando provo a invocare pskill per uccidere se stesso, il processo cmd.exe scompare dal Task Manager, e pskill segnala dall'interno del suo cmd. exe che il processo cmd.exe era stato ucciso, ma la finestra cmd.exe rimaneva ancora in piedi finché non cliccavo la ‘X’ nell'angolo:

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 ad ogni linea, ho notato che alcune di esse rispondevano e interrompevano l'elaborazione batch, mentre altre no.

Così ho semplicemente messo uno di quelli che rispondono alla fine invece di come l'avevo originariamente.

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

2
2
2
2010-09-25 04:29:25 +0000

Una volta che l'app ha finito, dovrebbe uscire. Sei sicuro che l'app Java esca correttamente?

1
1
1
2010-09-25 04:51:34 +0000

provare:

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

0
0
0
2015-10-16 12:53:17 +0000

Windows 2003 non ha “Account utente” nel Pannello di controllo per impostazione predefinita. Ho scritto un breve batch per aprire gli account utente:

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

Ha funzionato bene, gli account utente si sono aperti, ma anche la finestra CMD è rimasta aperta. Dopo alcune ricerche qui, ho aggiunto: START “” all'inizio della linea 2 in questo modo:

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

Ora la finestra Account utente si apre, rimane aperta e la finestra CMD si chiude. Facile facile.

0
0
0
2016-01-01 06:06:20 +0000

Ho cercato e ricercato una soluzione per chiudere una finestra di un file batch quando il comando EXIT lascia la finestra aperta per un motivo sconosciuto. Finalmente mi sono imbattuto in una soluzione.

Rimuovi EXIT dalla fine del file batch e usa:

Taskkill /IM conhost.exe /F
0
0
0
2016-07-15 10:37:30 +0000

Ho creato un file batch di utilizzo della rete su una macchina Windows 7 a 32 bit e il cmd del file batch non esce dopo l'esecuzione. Eseguo lo stesso file batch su un'altra macchina Windows 7 a 64 bit e il cmd del file batch esce normalmente.

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

Taskkill /IM cmd.exe /F

Il file batch net use non sempre esce normalmente e mostra la conferma “Terminate batch job (Y/N)” randomly.

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 della rete eventualmente esce normalmente.

0
0
0
2014-06-21 17:43:16 +0000

Ecco come ho fatto:

  1. Creare un file batch con il seguente contenuto:

  2. All'interno del vostro flusso di input di uscita, aggiungete: