这就是我所拥有的...
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循环重新开始。这可能吗?如果是这样,那该怎么做?预先感谢。
答案 0 :(得分:1)
我看到您有一个排除列表,因此,如果您只想排除某些用户,而对其余用户运行该命令,我将执行以下操作:
@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
,因为var
不能l
或eq
等于tes
。
有关更多信息,请参见if /?
。
关于您的最后评论。不,它不能假设其他人也不会匹配。这是一个场景:
Pete是要排除的用户,所以:
if not pete == sam if not pete == pete ...
您期望它退出,因为pete
不是sam
,因此它必须运行命令,但是下一个if
将会匹配。因此,每个用户都必须根据所有排除条件进行评估。