[英]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.