gpt4 book ai didi

java - 运行最后一行包含 'exit' 的批处理文件后,命令提示符不关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:14:44 25 4
gpt4 key购买 nike

我正在通过以下代码使用 java 运行批处理 (ScanProject.bat) 文件

Process p= Runtime.getRuntime().exec("cmd /c start /wait ScanProject.bat "+ BaseProjDir+"\\"+jo.getString("Name")+" "+st.nextToken()); 

System.out.println("Exit value : "+p.waitFor());

下面是批处理文件代码:-

%2:
cd %1
ant -f ..\antbuild.xml analyse
exit

批处理文件运行成功,但问题是命令提示符窗口不会自动关闭,因此进程不会自动终止,我的程序等待无限时间来完成此过程。请给我任何技术建议,以便 cmd exit 在运行 ant -f ..\antbuild.xml analyse 命令之后。

谢谢。

最佳答案

cd/D "Full path of directory"pushd "Full path of directory" with popd before exit 最好切换当前目录到任何驱动器上的任何目录(cdpushd/popd)甚至网络共享(只是 pushd/popd)。在命令提示符窗口中运行 cd/?pushd/? 以获取详细信息。

cmd/C 启动一个新的 Windows 命令进程,并在执行最后一个命令后自动关闭该进程。在命令提示符窗口中运行 cmd/? 以获取有关 Windows 命令解释器选项的详细信息。

start 是在单独的进程中启动新的 Windows 命令进程或 GUI/混合应用程序的命令。

所以您在这里所做的是启动一个新的 Windows 命令进程,该进程启动一个新的 Windows 命令进程。

在命令提示符窗口中运行 start/? 输出该命令的帮助。 start 通常将第一个双引号字符串解释为新命令进程的标题字符串。这通常会导致至少有 1 个双引号字符串的命令行出现问题。因此,使用 start 通常需要在双引号中显式定义标题字符串作为 start 的第一个参数,它甚至可以是空字符串,即简单的 "" 作为 start 之后的第一个参数。

因为在命令提示符窗口运行exit/?后可以读取,所以这个没有/B的命令总是立即退出当前的Windows命令进程。所以当ant.exe结束时,处理批处理文件的命令进程肯定终止了。

我没有 Java 开发经验,但在我看来,使用下面的执行命令就足够了,根本不需要批处理文件。

Java代码行

Process p= Runtime.getRuntime().exec("cmd.exe /C cd /D \"" + jo.getString("Name") + "\" && ant.exe -f ..\\antbuild.xml analyse"); 

应该足够了

  1. 启动一个新的 Windows 命令进程,
  2. 将此命令过程中的当前目录设置为 jo.getString("Name") 指定的驱动器和目录,这当然必须返回带有驱动器号并使用反斜杠作为目录分隔符的目录路径, 并成功
  3. 在该目录下使用指定的参数执行ant
  4. 如果 ant.exe 是控制台应用程序,则在控制台应用程序 ant.exe 完成后自动终止 Windows 命令进程。

我不确定是否需要 cmd.exe/C

我建议首先在命令提示符窗口中手动测试此命令。然后在 Java 应用程序中使用它,如果它真的工作并产生预期的结果。最后,我将进一步测试 Java 代码中是否需要 cmd.exe/C

有关操作符 && 的详细信息,请参阅 Single line with multiple commands using Windows batch file 以在上一个命令成功后运行命令。另请参阅 Why do not all started applications save the wanted information in the text files as expected? 以了解对控制台/GUI/混合应用程序 的解释。

注意: 还有 Java Runtime 方法 exec(String[] cmdarray, String[] envp, File dir) 来执行类似 ant.exe 的命令,其参数为 -f..\antbuild.xmlanalyse 在用第三个参数定义的目录中,这可能更适合此任务。

关于java - 运行最后一行包含 'exit' 的批处理文件后,命令提示符不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37771075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com