为什么执行批处理文件后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
答案1
如果 Java 应用程序没有终止(例如,您正在使用批处理文件启动 Java 应用程序),则使用以下命令start
启动它:-
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
这将启动 java 应用程序并继续执行批处理文件,而无需等待 java 应用程序完成。
答案2
解释:
它的工作原理如下:批处理文件一次处理一行。每个命令依次执行,批处理器等待一个命令完成后再开始下一个命令。您遇到的问题是因为您正在启动的 Java 应用程序 (Jilko.jar) 是一个窗口程序,即使在启动它的行之后它仍会继续运行。如果它是一个执行某些操作然后终止的工具,批处理文件将继续执行下一个命令(如果没有更多命令则退出)。因为程序仍在运行,所以批处理器会等到窗口关闭后再继续。您可以通过退出 Java 程序来查看此操作:然后带有批处理文件的控制台窗口将关闭。
解决方案:
要修复此问题,您需要指示批处理器启动该程序并继续运行而无需等待:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
作为Terrance 提到,""
是用于控制台窗口的标题。但是,只有当命令不在引号中时,它才是可选的;否则是必需的。您可以根据需要在其中输入一些内容,也可以将其留空,但如果命令在引号中,则必须存在,否则命令解释器会将引号中的命令视为标题,并打开一个控制台,等待执行某些操作。
您可以改用以下命令,但是使用引号更简单、更安全,因为不能保证每个系统上的短名称都相同。
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
该start
命令是一个内置命令,可生成一个进程(基本上类似于从“开始”菜单运行程序)。因此,在这种情况下,批处理器运行命令,该命令又运行指定的程序并终止(本身,而不是生成的程序)。因此,批处理器会按预期继续运行。它还有一些有用的选项,例如以最小化( )或最大化( )start
运行程序,以低优先级运行程序()等等。有关详细信息,请参阅。/min
/max
/low
start /?
答案3
我发现我启动的某些程序会让进程继续运行,如果我只是通过启动可执行文件来运行它们,那么控制台窗口将不会关闭,直到它们终止。
START 程序修复了这个问题,但是 START 的老问题仍然存在。您不能只使用:
START "c:\my dir\myfile.exe"
START 的第一个参数仍然是窗口名称。如果省略它,则只需打开一个 CMD 控制台框,其中包含您尝试启动的窗口名称。在上面的例子中,我现在有一个控制台窗口,窗口标题为“c:\我的目录\myfile.exe“。这不是我想要的!”
要省略窗口名称,只需使用一对双引号定义一个空字符串,例如:
START "" "c:\my dir\myfile.exe"
最后,使用 EXIT 命令结束批处理文件以确保其关闭。
此方法似乎在 Windows 7 和 8 中一致有效。
对于故障排除,我发现添加一个 ECHO 来表示我将要执行的操作,然后添加一个 TIMEOUT 来表示我刚刚执行的操作,这很有帮助。例如:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
由于超时会为您提供倒计时,因此您无需 ECHO 表示您即将延迟。
答案4
应用程序完成后,应该退出。您确定 Java 应用程序正常退出了吗?