命令失败的原因是必须引用带空格的路径(空格是标记分隔符)。
但以下操作仍然会失败,因为引号不能嵌套,所以
&
没有引用,初始批处理解析器将该行视为两个连接的命令,而不是单个命令
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"
.
但这可能更简单
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
但我不确定你真的需要明确地运行
java
在内部
cmd.exe
。您可以简单地使用以下内容
@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
最后,您可能不需要为每个进程单独设置一个窗口,在这种情况下,您可以添加
/B
选项到
开始
命令。把它放在后面
开始
.