Why won't cmd exit after execution of batch file?
Solution 1:
If the Java app does not terminate (e.g. you are using the batch file to launch the Java app), then use the start
command to launch it:-
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
This will launch the java app and carry on executing the batch file without waiting for the java app to finish.
Solution 2:
Explanation:
Here is how it works; a batch file is processed one line at a time. Each command is executed in turn and the batch processor waits for one command to finish before starting the next. The problem you are experiencing is because the Java application you are launching (Jilko.jar) is a windowed program which continues to run even after the line that launches it. If it were a tool that performs some action and then terminates, the batch file would continue on to the next command (or exit if there are no more). Because the program is still running, the batch processor waits until the window is closed before moving on. You can see this in action by exiting the Java program: the console window with the batch file then closes.
Solution:
What you need to do to fix it, is to instruct the batch processor to launch the program and continue on without waiting as such:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
As Terrance mentioned, the ""
is the title to use for the console window. However it is only optional if the command is not in quotes; otherwise is required. You can put something in there if you like or leave it empty, but if the command is in quotes, it must be present, otherwise the command-interpreter will treat the quoted command as the title and open a console that just sits there waiting for something to do.
You can use something the following command instead, but the quotes are just easier and safer since shortnames are not guaranteed to be the same on every system.
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
The start
command is a built-in command that spawns a process (basically like running a program from the Start menu). So what happens in this context is that the batch processor runs the start
command which in turn runs the specified program and terminates (itself, not the spawned program). As such, the batch processor continues on as expected. It also has some options that can be useful such as running the program minimized (/min
) or maximized (/max
), running it in low priority (/low
) and so on. See start /?
for details.
Solution 3:
I have found that some of the programs I launch leave processes running, and the console window will not close until they terminate if I just run them by launching the executable.
The START program fixes that, but the old problem with START is still around. You can't just use:
START "c:\my dir\myfile.exe"
The first parameter of START is still the window name. If you omit it, you just open a CMD console box with the window named whatever you tried to launch. In the above instance, I'd now have a console window with the window title of "c:\my dir\myfile.exe". Not what I wanted!
To omit the window name, just use a pair of double quotes to define an empty string, such as:
START "" "c:\my dir\myfile.exe"
Finally, end your batch file with an EXIT command to ensure it closes.
This method seems to work consistently in Windows 7 and 8.
For troubleshooting, I find that adding an ECHO of what I'm about to do, then a TIMEOUT of what I just did, helps a lot. For example:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
Since the Timeout gives you a countdown, you don't need to ECHO that you're about to delay.