找到值时退出循环



我有一个包含几行的文件:

"pathToFile=%~dp0PBreportcpyInstall"

更多,我有一个具有不同搜索值的字符串列表:

"searchValue=abc,there,rtz"

我的目标是在文件的每一行中搜索搜索值的出现,然后执行一些代码。但是,如果可能找到我的搜索值列表中的第一个元素,则不必检查其他值。 我用嵌套的 foor 循环完成了整个事情,但是当我实现类似GOTO的东西时,外部循环不会继续。在循环中使用GOTO是不是有些错误?或者,如果已经找到检查,是否有更好的方法来退出并跳过所有其他检查? 完整的代码在没有GOTO语句的情况下可以正常工作。

FOR /f "tokens=1 delims=" %%G in (%pathToFile%) do (
set "dataRow=%%~G"
FOR %%I in (%searchValue%) do ( 
IF not "!dataRow:%%I=!"=="!dataRow!" (
### some Code here ###
GOTO endIfCases
)
)
###some similiar blocks like the one above which can also be ignored if one match was found beforehand###
:endIfCases
### some Code which needs to be excecuted at the end of each loop from the outer FOR###
)

此解决方案简单高效:

FOR /f "tokens=1 delims=" %%G in (%pathToFile%) do (
set "dataRow=%%~G"
set "break="
FOR %%I in (%searchValue%) do if not defined break ( 
IF not "!dataRow:%%I=!"=="!dataRow!" (
### some Code here ###
set "break=1"
)
)
###some similiar blocks like the one above which can also be ignored if one match was found beforehand###
### some Code which needs to be excecuted at the end of each loop from the outer FOR###
)

你能这样安排你的代码吗(根据需要将参数传递给子例程(:

FOR /f "tokens=1 delims=" %%G in (%pathToFile%) do (
CALL :YourSubr "Parm1" "Parm2"
### some Code which needs to be excecuted at the end of each loop from the outer FOR###
)
GOTO :eof
:YourSubr
REM 1=???
REM 2=???
set "dataRow=%%~G"
FOR %%I in (%searchValue%) do ( 
IF not "!dataRow:%%I=!"=="!dataRow!" (
### some Code here ### using passed parameters
)
)

我看到您正在使用延迟扩展,但您的代码没有显示 SETLOCAL...所以要小心你的ENDLOCAL的位置。

相关内容

  • 没有找到相关文章

最新更新