繁体   English   中英

在批处理文件中,如果满足一个条件而不是周围的 for 循环,如何突破嵌套的 if 语句?

[英]Within a batch file, how can one break out of nested if statements if one criteria is met, but not the surrounding for loop?

这就是我所拥有的...

For /F %%A In ('Type "C:\List.Of.PCs.txt"') Do @(
  Set PC=%%A
  For /F %%B In ('Dir "C:\Users" /B') Do @(
    Set USR=%%B
    If "!USR!" Neq "AAA" (
      If "!USR!" Neq "ABC" (
        If "!USR!" Neq "CDE" (
          If "!USR!" Neq "DEF" (
            [28 more if statements]
            Dir "\\!PC!\C$\Users\!USR!\AppData\Local\Temp\Logs\File.To.Find.Log" >Nul 2>Nul
            If "%ErrorLevel%" Equ "0" Echo File found on !PC! for !USR! >"C:\Results.txt"
          )
        )
      )
    )
  )
)

目标是如果只满足其中一个,则打破所有这些 if 语句,然后从最外层的 for 循环重新开始。 这可能吗? 如果是这样,那到底是怎么做到的? 提前致谢。

我看到你有一个排除列表,所以如果你只想排除某些用户,但运行 rest 的命令,我会这样做:

@echo off
set "exclude=AAA BBB CCC DDD EEE FFF"
For /F %%A In ('Type "C:\List.Of.PCs.txt"') Do @(
for %%I in (%exclude%) do (
  For /F %%B In ('Dir /b "C:\Users"') Do (
    if not "%%B" == "%%I" (
            Dir "\\%%A\C$\Users\%%B\AppData\Local\Temp\Logs\File.To.Find.Log" | findstr /IRC:"File\.To\.Find\.Log" >nul 2>&1
            If errorlevel 0 (Echo File found on %%A for %%B)>>"C:\Results.txt"
      )
    )
  )
)

根据您的评论进行编辑,查看这些示例(并且可以从cmd运行)。

set "var=123"
if not "%var:~1%" == "1" if not "%var:~-1%" == "2" if not "%var:~1%" == "9" echo %var%

以上将打印为真,因为评估的位置都不为真。 每个if语句都会被评估,如果其中任何一个不正确,它将执行任务。

但是之后:

if not "%var:~1%" == "1" if not "%var:~-1%" == "3" if not "%var:~1%" == "9" echo %var%

不会执行echo ,因为其中一项评估未得到满足。 您可以按任何顺序放置它们,并且在每个都被评估时它仍然不会回显。

因此,您的代码可能类似于(未经测试):

@echo off
setlocal enabledelayedexpansion
For /F %%A In ('Type "C:\List.Of.PCs.txt"') Do @(
  For /F %%B In ('Dir /b "C:\Users"') Do (
    set "usr=%%B"
    if not "!usr:~1,3!" == "AAA" if not "!usr:~2,4!" == "BBB" if not "!usr:~1,3!" == "CCC" (
            Dir "\\%%A\C$\Users\!usr!\AppData\Local\Temp\Logs\File.To.Find.Log" | findstr /IRC:"File\.To\.Find\.Log" >nul 2>&1
            If errorlevel 0 (Echo File found on %%A for !usr!)>>"C:\Results.txt"
    )
  )
)

PS!! if not "var" == "tes"不是测量字符是否匹配, if 12 equ 12是数学的。 if "var" leq "tes eq var不能tes或等于l ,则您无法执行。

看看if /? 有关更多信息。

关于你的最后一条评论。 不,它不能假设一个不匹配的 rest 也不匹配。 这是一个场景:

Pete 是要排除的用户,因此:

if not pete == sam if not pete == pete ...

您希望它退出,因为pete不是sam ,所以它必须运行命令,但是,下一个if会匹配。 因此,我必须针对所有排除项对每个用户进行评估..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM