如何从 .bat 文件 运行 多项服务
How to run multiple services from .bat file
我想从 bat 文件 运行 selenium 服务器。表示启动hub和hub下的两个节点。在 Ubuntu 我有这个脚本可以做到这一点:
java -jar $jarFilePath -role hub &
java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ &
java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ &
exit 0
有必要用 & 链接它,因为第一个命令仍然是 运行ning 而不是 运行 下一个命令。但是在 Windows 上,由于某些原因,这不起作用。我为 Win 找到了类似的东西,但仍然没有成功。它打开了三个终端,但节点无法注册到集线器:
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role hub"
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
感谢您的帮助。
您的命令失败的原因是必须引用带有 space 的路径(space 是标记分隔符)。
但是下面的语句仍然会失败,因为引号不能嵌套,所以 &
没有被引号,并且初始批处理解析器将该行视为两个连接的命令而不是单个 start
命令。
比如看第一行,这个不行
start cmd.exe /k "cd "c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub"
要解决上述问题,许多人会逃避 &
start cmd.exe /k "cd "c:\Program Files\Selenium\Server" ^& java -jar selenium-server-standalone-3.141.59.jar -role hub"
但我更喜欢转义最外面的引号,这样我就可以编写命令,就像我自己在命令提示符中键入它们一样
start cmd.exe /k "cd ^"c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub^"
请注意 cd
默认情况下不会更改您的活动驱动器。所以假设你的活动驱动器是 D:
,那么上面的方法仍然不起作用。您将不得不使用 cd /d "c:\Program Files\Selenium\Server"
,或者 pushd "c:\Program Files\Selenium\Server"
.
但是在 start
命令之前 cd /d
或 pushd
可能更简单,这样您只需执行一次。 START
ed 进程继承父进程的环境。
服务终止后子进程不需要保持打开状态,所以最好使用cmd /c
而不是cmd /k
。
您的完整脚本可以是
@echo off
pushd "c:\Program Files\Selenium\Server"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role hub"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
popd
但我不确定您是否真的需要在 cmd.exe
中显式 运行 java
。您可以简单地使用以下
@echo off
pushd "c:\Program Files\Selenium\Server"
start java -jar selenium-server-standalone-3.141.59.jar -role hub
start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
popd
最后,您可能不需要为每个进程单独设置 window,在这种情况下,您可以将 /B
选项添加到 START
命令。将其紧跟在 start
.
之后
我想从 bat 文件 运行 selenium 服务器。表示启动hub和hub下的两个节点。在 Ubuntu 我有这个脚本可以做到这一点:
java -jar $jarFilePath -role hub &
java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ &
java -jar $jarFilePath -role node -hub http://173.249.58.30:4444/grid/register/ &
exit 0
有必要用 & 链接它,因为第一个命令仍然是 运行ning 而不是 运行 下一个命令。但是在 Windows 上,由于某些原因,这不起作用。我为 Win 找到了类似的东西,但仍然没有成功。它打开了三个终端,但节点无法注册到集线器:
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role hub"
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
start cmd.exe /k "cd c:\Program Files\Selenium\Server & java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
感谢您的帮助。
您的命令失败的原因是必须引用带有 space 的路径(space 是标记分隔符)。
但是下面的语句仍然会失败,因为引号不能嵌套,所以 &
没有被引号,并且初始批处理解析器将该行视为两个连接的命令而不是单个 start
命令。
比如看第一行,这个不行
start cmd.exe /k "cd "c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub"
要解决上述问题,许多人会逃避 &
start cmd.exe /k "cd "c:\Program Files\Selenium\Server" ^& java -jar selenium-server-standalone-3.141.59.jar -role hub"
但我更喜欢转义最外面的引号,这样我就可以编写命令,就像我自己在命令提示符中键入它们一样
start cmd.exe /k "cd ^"c:\Program Files\Selenium\Server" & java -jar selenium-server-standalone-3.141.59.jar -role hub^"
请注意 cd
默认情况下不会更改您的活动驱动器。所以假设你的活动驱动器是 D:
,那么上面的方法仍然不起作用。您将不得不使用 cd /d "c:\Program Files\Selenium\Server"
,或者 pushd "c:\Program Files\Selenium\Server"
.
但是在 start
命令之前 cd /d
或 pushd
可能更简单,这样您只需执行一次。 START
ed 进程继承父进程的环境。
服务终止后子进程不需要保持打开状态,所以最好使用cmd /c
而不是cmd /k
。
您的完整脚本可以是
@echo off
pushd "c:\Program Files\Selenium\Server"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role hub"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
start cmd.exe /c "java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/"
popd
但我不确定您是否真的需要在 cmd.exe
中显式 运行 java
。您可以简单地使用以下
@echo off
pushd "c:\Program Files\Selenium\Server"
start java -jar selenium-server-standalone-3.141.59.jar -role hub
start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
start java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.137.1:4444/grid/register/
popd
最后,您可能不需要为每个进程单独设置 window,在这种情况下,您可以将 /B
选项添加到 START
命令。将其紧跟在 start
.