gpt4 book ai didi

java - 无法在java程序中运行.bat文件

转载 作者:行者123 更新时间:2023-11-30 06:33:57 25 4
gpt4 key购买 nike

问题陈述:我只想启动HUB和Node来使用Selenium Grid执行一些测试。我有两个批处理文件 START HUB.bat 和 START NODE.bat,当我手动运行它们时,它们可以完美运行。但我希望它们使用 Java 程序 @BeforeMethod 运行。我寻找答案

    Runtime.getRuntime().exec("cmd /C start \"./BatchFiles/START HUB.bat\"");

这将打开 CMD,但会转到我的 .git 项目的路径,但不会运行 bat 文件。

我尝试使用 Process Builder,但没有打开 cmd。

    ProcessBuilder pb = new ProcessBuilder("cmd", "/C"," start", "START HUB.bat");
File dir = new File("D:\\work\\GIT REPOSITORY\\project.selenium.maven.jenkinsCI\\BatchFiles");
pb.directory(dir);
Process p = pb.start();

有人可以帮我解决这个问题吗?以下是批处理文件中的命令。

    D:
cd work
java -jar selenium-server-standalone-3.4.0.jar -role hub

最佳答案

所以你想执行命令行:

cmd /C start "./BatchFiles/START HUB.bat"

在命令行开头使用 cmd,新的命令进程已通过执行 %SystemRoot%\System32\cmd.exe 启动。根据使用选项 /C 明确请求运行命令后,此命令进程应自动关闭,这意味着 关闭,因为可以在命令提示符窗口 cmd 中运行时读取它/?.

该命令进程中要执行的命令是:

start "./BatchFiles/START HUB.bat"

cmd.exe的内部命令start用于在新进程中启动可执行文件或脚本。可以在命令提示符窗口 start/? 中读取其帮助。

第一个双引号字符串被 start 解释为当应在新命令进程中执行批处理文件或控制台应用程序时打开的新命令进程窗口的标题。

这就是批处理文件未执行的原因,因为“./BatchFiles/START HUB.bat”被解释为窗口标题字符串。

在 Windows 上,目录分隔符是 \,而不是 Unix 上的 // 用作选项的开头,如 /C 上所示。但 Windows 也处理带有 / 的文件路径,通常是正确的,因为用绝对或相对路径在目录/文件名中将每个 / 内部替换为 \访问目录或文件时。

所以解决方案是使用其中之一

Runtime.getRuntime().exec("cmd.exe /C start \"start hub\" \".\\BatchFiles\\START HUB.bat\"");

或使用

Runtime.getRuntime().exec("cmd.exe /C \"BatchFiles\\START HUB.bat\"");

以目录或文件名开头的路径相对于 Windows 上正在运行的进程的当前目录,例如在目录或文件名字符串的开头使用 .\

第一个代码启动一个命令进程,该进程执行命令 start,该命令又启动一个标题为 start hub 的命令进程,执行批处理文件。第一个由 cmd.exe 启动的命令进程在运行 start 后立即终止,而批处理文件则在第二个启动的命令进程中执行。这意味着您的 Java 应用程序将在并行执行批处理文件的同时继续运行。

第二个代码导致在以 cmd.exe 启动的单个命令进程中执行批处理文件,并停止 Java 应用程序的执行,直到整个批处理文件执行完成。

可以通过以下方式删除批处理文件的使用:

Runtime.getRuntime().exec("cmd.exe /C start \"start hub\" /D D:\\work java.exe -jar selenium-server-standalone-3.4.0.jar -role hub");

使用/D D:\work,工作目录被定义为用于执行java.exe及其参数而启动的命令进程。

或者不使用start命令:

Runtime.getRuntime().exec("cmd.exe /C cd /D D:\\work && java.exe -jar selenium-server-standalone-3.4.0.jar -role hub");

在命令提示符窗口中运行 cd/? 以获取有关 cd/D D:\work 的帮助,并参阅 Single line with multiple commands using Windows batch file 了解运算符 && 的说明> 此处用于指定在一行上执行的两个命令,其中仅当 cd 能够成功将工作目录更改为 D:\work< 时才执行 java.exe/.

关于java - 无法在java程序中运行.bat文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532723/

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