【问题标题】:Second instance of batch loop does not run批处理循环的第二个实例未运行
【发布时间】:2016-04-05 20:28:24
【问题描述】:

我正在尝试在我的 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 循环时使用的是相同的变量,而不是获取新的未使用端口号。

我做错了什么?我从其他来源复制了这段代码的各个部分。我显然是个小人,所以简单的英语会很有帮助。 :)

【问题讨论】:

  • 请编辑您的代码以使其可读。根据您的描述,这听起来像是delayed expansion 问题。
  • 你真的还在使用 MS-DOS 吗?我不这么认为;请检查标签并进行相应调整...
  • 为了进一步说明 Stephan 所说的 - 您将代码作为引用文本输入,使其完全不可读。我们无法知道换行符在哪里,而换行符在批处理脚本中至关重要。编辑您的问题并删除引号(黄色部分)并重新输入代码,但使用代码按钮(大括号)。如果操作正确,代码将是灰色的。
  • @dbenham ...谢谢你的耐心和具体,因为我是新手。非常感谢。
  • 我还尝试将 searchPort 子例程作为单独的批处理文件提取出来,并使用以下命令调用它: call searchPort %startPort% 作为 FOR 循环开始后的第一行。当然,不知道我在做什么,它没有工作。

标签: batch-file selenium for-loop subroutine


【解决方案1】:

您遇到了delayed expansion 问题。

您已经启用延迟扩展,但您没有使用它。您必须在 for /l 循环中将 %startPort% 替换为 !startPort!。

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 2017-07-06
    相关资源
    最近更新 更多