我正在尝试在Windows 7计算机上创建DOS批处理脚本。我想执行文件123456.bat,其中包含以下命令和参数:
call **startSelenium.bat** 55 someSuiteName suite-someSuite.html development 1 1 10 10
该脚本调用下面的 startSelenium.bat 脚本:
Setlocal EnableDelayedExpansion
SET TimeStamp=
FOR /f "tokens=1-4 delims=/ " %%i in ("%date%") do set datestr=%%l%%j%%k
FOR /f "tokens=1-4 delims=.: " %%i in ("%time%") do set timestr=%%i%%j%%k%%l
SET TimeStamp=%datestr%%timestr%
set a=2
set b=0
set /a c=%a%+%b%
FOR /l %%t IN (1, 1, %c%) do (
call :SEARCHPORT %%t
echo %startPort%
Start java -jar C:\Selenium\2\selenium-server-standalone-2.47.1.jar -port %startPort% -singleWindow -userExtensions C:\selenium\2\user-extensions.js -firefoxProfileTemplate "c:\selenium\2\ffprofiles\2rc" -htmlSuite "*chrome" "https://www.google.com" "Z:\selenium\2\environment\%4\suites\%3" "u:\results\%4\result-%1-%computername%-1234-%TimeStamp%.htm"
timeout /t 10
)
GOTO :EOF
:SEARCHPORT
netstat -o -n -a | find "LISTENING" | find ":%startPort% " > NUL
if "%ERRORLEVEL%" equ "0" (
set /a startPort +=1
GOTO :SEARCHPORT
) ELSE (
set freePort=%startPort%
echo %startPort%
GOTO :EOF
当我运行脚本时,java应用程序的第一个实例使用SEARCHPORT子例程找到的空闲Windows端口运行;但是,第二个实例会弹出并立即退出。我怀疑代码在第一次通过FOR循环时使用的是相同的变量,而不是获得一个新的未使用的端口号。
我做错了什么?我从其他来源复制了此代码的各个部分。我显然是个笨蛋,所以简单的英语会有所帮助。 :)
答案 0 :(得分:0)
您遇到delayed expansion问题。
您已经启用了延迟扩展,但您没有使用它。您必须在%startPort%
循环中将!startPort!
替换为for /l
。