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

Waarom sluit cmd niet af na uitvoering van batch-bestand?

Waarom sluit cmd niet af na uitvoering van batchbestand?

Ik heb geprobeerd:

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

en

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

Antwoorden (11)

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

Als de Java-app niet wordt afgesloten (bv. je gebruikt het batchbestand om de Java-app te starten), gebruik dan het commando start om hem te starten:-

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

Dit start de Java-app en gaat verder met het uitvoeren van het batchbestand zonder te wachten tot de Java-app is voltooid.

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

Uitleg:

Het werkt als volgt: een batchbestand wordt regel voor regel verwerkt. Elke opdracht wordt om de beurt uitgevoerd en de batchprocessor wacht tot een opdracht is voltooid voordat hij met de volgende begint. Het probleem dat je ondervindt is dat de Java applicatie die je start (Jilko.jar) een windowed programma is dat blijft draaien zelfs na de regel die het start. Als het een programma was dat een actie uitvoert en dan afsluit, zou het batchbestand doorgaan naar het volgende commando (of afsluiten als er geen meer zijn). Omdat het programma nog steeds loopt, wacht de batch processor tot het venster gesloten is voordat hij verder gaat. Je kunt dit in actie zien door het Java programma af te sluiten: het consolevenster met het batchbestand wordt dan gesloten.

Oplossing:

Wat je moet doen om dit te verhelpen, is de batchprocessor opdracht geven het programma te starten en verder te gaan zonder als zodanig te wachten:

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

Zoals Terrance al zei , de "" is de titel die gebruikt moet worden voor het console venster. Het is echter alleen optioneel als het commando niet tussen aanhalingstekens staat; anders is het verplicht. Je kunt er iets in zetten als je wilt of het leeg laten, maar als het commando tussen aanhalingstekens staat, moet het aanwezig zijn, anders zal de commando-interpreter het aangehaalde commando behandelen als de titel en een console openen die daar maar zit te wachten tot er iets gedaan wordt.

Je kunt in plaats daarvan iets als het volgende commando gebruiken, maar de aanhalingstekens zijn gewoon gemakkelijker en veiliger omdat korte namen niet gegarandeerd hetzelfde zijn op elk systeem.

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

Het start commando is een ingebouwd commando dat een proces start (eigenlijk net zoiets als een programma starten vanuit het Start menu). Dus wat er in deze context gebeurt is dat de batchprocessor de start opdracht uitvoert die op zijn beurt het gespecificeerde programma uitvoert en beëindigt (zichzelf, niet het gespawnde programma). Op die manier gaat de batch processor verder zoals verwacht. Het heeft ook enkele opties die nuttig kunnen zijn, zoals het programma geminimaliseerd (/min) of gemaximaliseerd (/max) uitvoeren, het met lage prioriteit uitvoeren (/low) enzovoort. Zie start /? voor details.

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

Ik heb gemerkt dat sommige van de programma’s die ik start, processen laten lopen, en dat het consolevenster niet sluit totdat ze zijn afgelopen als ik ze gewoon uitvoer door het uitvoerbare programma te starten.

Het START programma lost dat op, maar het oude probleem met START is er nog steeds. Je kunt niet gewoon gebruiken:

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

De eerste parameter van START is nog steeds de naam van het venster. Als je die weglaat, open je gewoon een CMD console box met het venster met de naam die je probeerde te starten. In het bovenstaande geval zou ik nu een console venster hebben met de venster titel van “c:\my dirmyfile.exe”. Niet wat ik wilde!

Om de vensternaam weg te laten, gebruik je gewoon een paar dubbele aanhalingstekens om een lege string te definiëren, zoals:

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

Tenslotte sluit je het batchbestand af met een EXIT commando om het te laten sluiten.

Deze methode lijkt consistent te werken in Windows 7 en 8.

Om problemen op te lossen, vind ik dat een ECHO toevoegen van wat ik ga doen, en dan een TIMEOUT van wat ik net gedaan heb, veel helpt. Bijvoorbeeld:

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

Omdat de Timeout je een aftelling geeft, hoef je niet te ECHO'en dat je op het punt staat te vertragen.

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

Ook – gebruik EXIT altijd, onder Windows 7, omdat alleen het einde van het batch-bestand bereiken het niet noodzakelijkerwijs beëindigt – zoals in eerdere Windows versies. Windows 7 kan hier gevoeliger voor zijn dan eerdere NT versies (b.v. Windows 2000 Professional). Dit werd genoemd in sommige, maar niet alle voorgaande antwoorden.

Details van persoonlijke ervaring om antwoord te ondersteunen:

Na het overzetten van een StarOffice5.2 installatie van Windows 2000 naar Windows 7, kreeg ik geheugen ruimte fouten bij het afsluiten van de suite. Dit was niet te zien in Windows 2000.

Jaren geleden had ik batch bestanden geschreven om automatisch een backup te maken van soffice.ini en het terug te zetten, zodat het gerepareerd kon worden als het corrupt was geraakt (vaak genoeg om een probleem te zijn – de suite laadt niet). De automatische backup (getriggerd door een link naar het batchbestand, geplaatst in Office52gebruikerinstellingenstartup) gebeurt echter pas na een vertraging van ongeveer 5 seconden. Ik merkte dat wanneer ik de suite afsloot net voordat het batch bestand liep, de suite zonder fout werd afgesloten. Dit wees mij op een probleem in de batch bestanden.

Nadat de ‘EXIT’ opdracht als laatste regel in de batch bestanden was geplaatst, begon de office suite te eindigen zonder geheugen-ruimte fout meldingen, te allen tijde, of de batch bestanden nu wel of niet waren uitgevoerd.

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

Ik had net met hetzelfde probleem te maken, en het loste zichzelf uiteindelijk op na het maken van wat willekeurige veranderingen in de batchfile leken- Ik begrijp niet waarom maar ik zal het hier posten voor het geval het iemand anders later helpt.

Ik maak gebruik van de SysInternals Pskill utility en de sleep utility aangezien XP Home niet veel commandline-functionaliteit bevat.


Dit is het batchbestand dat daadwerkelijk wordt afgesloten als het klaar is:

@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
  • *

Als ik de laatste paar regels zo had veranderd, zou het cmd venster open blijven totdat ik op de ‘X’ in de hoek klikte:

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

Zelfs als ik pskill probeerde aan te roepen om zichzelf te doden, zou het cmd.exe proces verdwijnen uit Task Manager, en pskill zou melden vanuit zijn cmd. exe dat het cmd.exe proces was gedood, maar het cmd.exe venster bleef nog steeds in beeld totdat ik op de ‘X’ in de hoek klikte:

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
  • *

Nadat ik && exit aan iedere regel had toegevoegd, merkte ik dat sommigen erop reageerden en de batch verwerking onderbraken- terwijl anderen dat niet deden.

Dus zette ik een van de responsieve aan het eind in plaats van hoe ik het oorspronkelijk had.

Zoals ik al zei, ik weet niet waarom, maar ik ben blij dat dit voorbij is.

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

Als de app klaar is, zou hij moeten afsluiten. Weet je zeker dat de Java app correct wordt afgesloten?

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

Probeer:

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 heeft standaard geen “Gebruikersaccounts” in het Configuratiescherm. Ik schreef een korte batch om de gebruikersaccounts te openen:

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

Het werkte OK, de Gebruikersaccounts gingen open, maar het CMD venster bleef ook open. Na wat onderzoek hier, voegde ik: START “” toe aan het begin van regel 2, als volgt:

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

Nu gaat het venster Gebruikersaccounts open, blijft open en het CMD venster sluit. Makkelijk zat.

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

Ik heb gezocht en gezocht naar een oplossing om een venster van een batchbestand te sluiten wanneer de opdracht EXIT het venster om een onbekende reden open laat. Ik ben eindelijk op een oplossing gestuit.

Verwijder EXIT aan het eind van het batch-bestand en gebruik:

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

Ik heb een net use batchbestand gemaakt op een Windows 7 32-bits machine en de cmd van het batchbestand wordt niet afgesloten na uitvoering. Ik voer hetzelfde batchbestand uit op een andere Windows 7 64-bits machine en de cmd van het batchbestand sluiten normaal af.

Ik probeerde Bryan’s suggestie en het werkt niet op die Windows 7 32-bit machine omdat er geen conhost.exe proces was dus ik wijzigde het als volgt:

Taskkill /IM cmd.exe /F

Het net use batchbestand wordt niet altijd normaal afgesloten en het toont “Batchtaak beëindigen (J/N)” bevestiging willekeurig.

Volgens deze thread heb ik het batch bestand als volgt gewijzigd:

@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

Het net use batch bestand sluit eindelijk normaal af.

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

Hier is hoe ik het gedaan heb:

  1. Maak een batch-bestand met de volgende inhoud:

  2. In je exit input stream, voeg toe: