Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在批处理文件中,如果满足一个条件,而不满足周围的for循环,如何打破嵌套的if语句?_Loops_For Loop_Batch File_If Statement - Fatal编程技术网

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

Loops 在批处理文件中,如果满足一个条件,而不满足周围的for循环,如何打破嵌套的if语句?,loops,for-loop,batch-file,if-statement,Loops,For Loop,Batch File,If Statement,这是我所拥有的 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" (

这是我所拥有的

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语句的情况下中断所有if语句,然后使用最外层的for循环重新开始。这可能吗?如果是这样,那到底是怎么做到的?提前感谢。

我看到您有一个排除列表,因此如果您只想排除某些用户,但对其余用户运行该命令,我将执行以下操作:

@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
运行)

上述内容将打印为真,因为所有评估的位置都不为真。 如果对每个
语句求值,如果其中任何一个都不为真,它将执行该任务

但是:

if not "%var:~1%" == "1" if not "%var:~-1%" == "3" if not "%var:~1%" == "9" echo %var%
将不执行回声
,因为其中一项评估不符合要求。您可以将它们按任何顺序放置,但在对每个进行求值时,它们仍然不会回声

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

PS
if not“var”==“tes”
不是字符匹配的度量,其中
if 12 eq 12
是数学的。如果“var”leq“tes作为
var
不能是
l
ess或
eq
ual到
tes
,则不能执行

请参阅
if/?
,了解更多信息

在你最后的评论中。不,它不能假设如果一个不匹配,其余的也不会。下面是一个场景:

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

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

您希望它退出,因为
pete
不是
sam
,因此它必须运行该命令,但是,如果
匹配,则下一个
。因此每个用户都必须根据所有排除项进行评估。

因此,是否要为不在排除列表中的每个用户执行该命令?您可以使用
GOTO
>要跳出
的标签loop@HackingAddict1337.
goto
将完全脱离循环,您不能在括号内的代码块中
goto
。请提供所有实际的
if
语句(如果它们都是相同的
if“!USR!”Neq”什么的“
,只需提供所有实际的
内容即可)。是的,我确实考虑过使用另一个for循环的排除列表,但有些排除是部分用户名,如(If“!USR:~0,3!”Neq“\u 12”)或(If“!USR:~-5!”Neq“\u test”)。因此,设置变量并继续执行
如果不是“!USR:~0,3!”==“\u 12”If“!USR:~-5!”Neq”)。因此,请设置变量并继续执行
如果不是“!USR:~0,3!”==“=”Neq”“_test”
在一条直线上。这意味着,如果其中任何一条是真的,那么其余的都可以。我将在答案中发布一个简单的例子,你可以测试并看到这个概念。我也为你在答案中添加了差异,并将所有的“如果不是”“在一行中,如果满足其中一个条件,则允许该行立即中断…从而允许代码更快地运行?不。每个用户都需要根据每个条件进行评估。如果是另一种方式,则需要匹配用户而不是排除用户,则在找到匹配项后将立即运行该命令。
@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"
    )
  )
)
if not pete == sam if not pete == pete ...