【问题标题】:close windows command prompt after all process completed in the batch file在批处理文件中的所有过程完成后关闭 Windows 命令提示符
【发布时间】:2014-11-24 06:05:24
【问题描述】:

我有两个需要运行的批处理文件。这两个bat文件中调用了两个不同的java文件。

Java 文件:J1.jar、J2.jar 并被包装在 J1.bat (xxx/java -jar J1.jar) 和 J2.bat 中 浴缸文件:batch1.bat、batch2.bat 可执行程序:p1.exe、p2.exe、p3.exe、p4.exe

J1 将自己打开一个命令提示符(cmd 提示符窗口 #1)并触发 batch2.bat(cmd 提示符窗口 #2),在 batch2 完成后,J1 将执行一些其他操作然后退出。所以我肯定需要关闭 cmd 提示窗口 #2 并返回到 cmd 提示窗口 #1,这样 J1 才能完成它必须做的事情。

现在,在 batch2.bat 完成后,窗口仍然存在,显然它不会将控制权返回给 cmd 提示窗口 #1。

这是两个批处理文件

batch1.bat

call J1 batch2.bat
exit

batch2.bat

call J2 p1 p1_args
start /b J2 p2 p2_args    
start /b J2 p3 p3_args
call J2 p4 p4_args
exit

我尝试了以下方法,但没有一个会关闭 cmd 提示窗口#2

  • 启动 J2 p2 p2 p2_args(这将打开另一个窗口并且不会关闭 cmd 提示窗口#2
  • start "" J2 p2 p2_args(这将打开另一个窗口并且不会关闭 cmd 提示窗口#2)
  • start /b cmd /c J2 p2 p2_args(这不会打开新窗口但不会关闭cmd提示窗口#2)
  • 在 batch2.bat 中使用 exit /b(不关闭 cmd 提示窗口#2)

我还尝试将这两个 p2 和 p3 放在单独的 bat 文件中,并从 batch2.bat 中调用该 bat 文件,但该命令提示符窗口仍然无法关闭。

有没有办法关闭第二个命令提示符窗口??我听说使用自动热键来做窗口脚本,这是一个解决方案和更好的方法来做窗口脚本吗?

我非常感谢任何帮助。谢谢!

【问题讨论】:

  • 你用 cmd /k 启动 batch2 吗?如果是这样,将其更改为 cmd /c
  • batch2 用 cmd /c 调用

标签: java windows batch-file command-line cmd


【解决方案1】:

经过观察,发现cmd退出后,不会返回提示符,需要回车才能启动。我决定在出口后换一条新线,它奏效了。我用以下代码行替换了出口。

@echo off
set NLM=^
set NL=^^^%NLM%%NLM%^%NLM%%NLM%
exit %NL%

来自这篇文章,Explain how dos-batch newline variable hack works

【讨论】:

    猜你喜欢
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2017-11-10
    • 2017-07-02
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多