Loops 找到值时退出循环

Loops 找到值时退出循环,loops,for-loop,batch-file,cmd,exit,Loops,For Loop,Batch File,Cmd,Exit,我有一个文件,其中有几行: “pathToFile=%~dp0PBreport\cpy\Install\” 此外,我有一个具有不同搜索值的字符串列表: “searchValue=abc,there,rtz” 我的目标是搜索文件的每一行中是否出现搜索值,然后执行一些代码。但是,如果在我的搜索值列表中找到了第一个元素,则无需检查其他值。 我使用嵌套的foor循环来完成整个过程,但是当我实现类似于GOTO的东西时,外部循环不会继续。tehre在循环中使用GOTO有什么错误吗?或者,如果已经找到一个,是

我有一个文件,其中有几行:

“pathToFile=%~dp0PBreport\cpy\Install\”

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

“searchValue=abc,there,rtz”

我的目标是搜索文件的每一行中是否出现搜索值,然后执行一些代码。但是,如果在我的搜索值列表中找到了第一个元素,则无需检查其他值。 我使用嵌套的foor循环来完成整个过程,但是当我实现类似于
GOTO
的东西时,外部循环不会继续。tehre在循环中使用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###
)

您可以这样安排代码(根据需要将参数传递给子例程):


我看到您正在使用延迟扩展,但您的代码没有显示SETLOCAL。。。因此,请注意ENDLOCAL的位置。

您可以这样安排代码(根据需要将参数传递给子例程):


我看到您正在使用延迟扩展,但您的代码没有显示SETLOCAL。。。因此,请注意ENDLOCAL的放置位置。

此解决方案简单有效:

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 (
  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###
)

GOTO
命令执行编程设定的操作。转到代码中的预定义标签并从那里开始执行。这将为您正在执行的命令中断任何
。这就是我想要它做的。但是,他似乎也没有继续/f的outter循环,因为我的输出只有一个值,正如我所说,它会为您正在执行的
命令中断任何
。你需要打电话给一家公司做你想做的事。啊,我明白,好的,我会试着这么做的。谢谢你。记得一周前我给你提供的吗?这里有一个基本的三行示例:1<代码>@Set“listPC=Win10,主板,USB端口,核心”
,2
@Set“dummyline=Environment,1234,ZUIOP,Core”
,3<代码>@For%%#In(%listPC%)Do Echo(“%%#”| FindStr/IL”\%dummyline:,=%\”“>NUL&&(Echo Searchstring%%在要测试和暂停的字符串中)。这离您现在要求的有多远?
GOTO
命令执行它被编程的任务。转到代码中的预定义标签并从那里开始执行。这将中断您正在执行的任何
命令。这就是我希望它做的。但是,他似乎也不会继续执行作为我的输出,/f的ter循环只有一个值,因为我说过它会打断您正在执行的
命令的任何
。您需要调用标签来完成您想做的事情。啊,我明白了,好的,我会尝试这样做的。谢谢您的记忆,当我一周前提供给您时?这里有一个基本的三行示例:1。
@Set“listPC=Win10,主板,USB端口,核心”
,2.
@Set“dummyline=Environment,1234,ZUIOP,核心”
,3.
@对于%%\In(%listPC%)执行Echo(%%)“\FindStr/IL”\%dummyline:,=%\”>NUL&(Echo Searchstring%%是要测试和暂停的字符串)
。这与您现在提出的问题有多远?据我所知,OP希望在找不到一个值后取消对其余值的处理。您的解决方案总是处理所有值…可能您忘记了一个
转到
?;)据我所知,OP希望在未找到一个值后取消对其余值的处理。您的解决方案始终处理所有值…可能您忘记了一个
转到
?;)