Joe*_*Joe 29 windows-7 batch-file
为什么执行批处理文件后cmd不会退出?
我试过了:
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Run Code Online (Sandbox Code Playgroud)
和
@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit
Run Code Online (Sandbox Code Playgroud)
mis*_*tee 34
如果 Java 应用程序没有终止(例如,您正在使用批处理文件启动 Java 应用程序),则使用以下start
命令启动它:-
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
这将启动 java 应用程序并继续执行批处理文件,而无需等待 java 应用程序完成。
Syn*_*ech 21
解释:
下面是它的工作原理; 批处理文件一次处理一行。每个命令依次执行,批处理器等待一个命令完成,然后再开始下一个命令。您遇到的问题是因为您正在启动的 Java 应用程序 (Jilko.jar) 是一个窗口程序,即使在启动它的行之后仍会继续运行。如果它是一个执行某些操作然后终止的工具,则批处理文件将继续执行下一个命令(如果没有更多命令,则退出)。由于程序仍在运行,批处理程序会等到窗口关闭后再继续。您可以通过退出 Java 程序看到这一过程:带有批处理文件的控制台窗口随即关闭。
解决方案:
您需要做的是修复它,是指示批处理器启动程序并继续运行而无需等待:
start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
Run Code Online (Sandbox Code Playgroud)
正如Terrance 所提到的,这""
是用于控制台窗口的标题。但是,仅当命令不在引号中时它才是可选的;否则是必需的。如果你愿意,你可以在那里放一些东西或留空,但如果命令是在引号中,它必须存在,否则命令解释器会将引用的命令视为标题并打开一个控制台,它只是坐在那里等待做某事。
您可以使用以下命令代替,但引号更简单、更安全,因为不能保证每个系统上的短名称都相同。
start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar
Run Code Online (Sandbox Code Playgroud)
该start
命令是生成进程的内置命令(基本上类似于从“开始”菜单运行程序)。所以在这种情况下发生的是批处理器运行start
命令,该命令又运行指定的程序并终止(它本身,而不是生成的程序)。因此,批处理程序按预期继续运行。它还有一些有用的选项,例如运行最小化 ( /min
) 或最大化 ( /max
) 程序、以低优先级运行 ( /low
) 等。详情请参阅start /?
。
小智 8
我发现我启动的一些程序会使进程运行,如果我只是通过启动可执行文件来运行它们,控制台窗口将不会关闭,直到它们终止。
START 程序修复了这个问题,但 START 的老问题仍然存在。你不能只使用:
START "c:\my dir\myfile.exe"
Run Code Online (Sandbox Code Playgroud)
START 的第一个参数仍然是窗口名称。如果您省略它,您只需打开一个 CMD 控制台框,其中窗口命名为您尝试启动的任何内容。在上面的例子中,我现在有一个控制台窗口,窗口标题为“ c:\my dir\myfile.exe ”。不是我想要的!
要省略窗口名称,只需使用一对双引号定义一个空字符串即可,例如:
START "" "c:\my dir\myfile.exe"
Run Code Online (Sandbox Code Playgroud)
最后,使用 EXIT 命令结束批处理文件以确保它关闭。
此方法似乎在 Windows 7 和 8 中始终有效。
对于故障排除,我发现添加我将要做的事情的 ECHO,然后我刚刚所做的事情的 TIMEOUT,有很大帮助。例如:
ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5
Run Code Online (Sandbox Code Playgroud)
由于超时为您提供倒计时,因此您无需回显您将要延迟。
小智 5
此外——在 Windows 7 下始终使用 EXIT ,因为到达批处理文件的末尾并不一定会终止它——就像在早期的 Windows 版本中一样。与早期的 NT 版本(例如 Windows 2000 Professional)相比,Windows 7 可能对此更敏感。之前的一些答案中提到了这一点,但并非所有答案中都提到了这一点。
详细个人经历支持回答:
将 StarOffice5.2 安装从 Windows 2000 转移到 Windows 7 后,我在终止套件时遇到内存空间错误。这在 Windows 2000 中是没有的。
多年前,我编写了批处理文件来自动备份和恢复 soffice.ini,以便在它损坏时进行修复(通常足以成为问题——套件无法加载)。然而,自动备份(由指向批处理文件的链接触发,位于 Office52\user\config\startup 中)仅在大约 5 秒延迟后发生。我注意到每当我在批处理文件运行之前退出套件时,套件的终止都没有错误。这向我指出了批处理文件中的一个问题。
在将“退出”命令作为批处理文件的最后一行后,无论批处理文件是否已运行,办公套件开始终止而没有内存空间错误消息。
归档时间: |
|
查看次数: |
184142 次 |
最近记录: |