为什么执行批处理文件后cmd不会退出?

为什么执行批处理文件后cmd不会退出?

为什么执行批处理文件后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/lowstart /?

答案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 应用程序正常退出了吗?

相关内容