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 批处理文件循环,直到显示特定文本_Loops_Batch File_Icacls - Fatal编程技术网

Loops 批处理文件循环,直到显示特定文本

Loops 批处理文件循环,直到显示特定文本,loops,batch-file,icacls,Loops,Batch File,Icacls,目前有一个使用takeown和icacls命令替换NTFS权限的批处理文件,我已将这些命令添加到循环中,效果非常好 当显示某个响应时,是否有方法退出循环?比如“处理0个文件失败”之类的?下面是我正在使用的代码,希望这也能帮助其他人 @echo off setlocal enabledelayedexpansion for /l %%x in (1,1,1000) do ( echo Taking ownsership of Folders & Files - loop %%x

目前有一个使用takeown和icacls命令替换NTFS权限的批处理文件,我已将这些命令添加到循环中,效果非常好

当显示某个响应时,是否有方法退出循环?比如“处理0个文件失败”之类的?下面是我正在使用的代码,希望这也能帮助其他人

@echo off
setlocal enabledelayedexpansion
for /l %%x in (1,1,1000) do (

    echo Taking ownsership of Folders & Files - loop %%x
    for /f "delims=" %%i in ('takeown.exe /R /A /F "F:\Shares\NetBackup Clients" /D N ^| findstr /i /C:"Failed processing 0 files"') do (
        set "error=%%i"
        if "!errorlevel!"=="0" goto :end
    )

    echo Applying permissions to filestore - loop %%x
    icacls.exe "F:\Shares\NetBackup Clients" /grant "Domain\Group":F /grant "Domain\Group":R /T /C

    echo Finished applying permissions to filestore - loop %%x >> C:\Loopy.txt
)
goto :eof
:end
echo %error% 

非常感谢

我认为您可能有错误,因此您需要相应地调整它,但我们使用
findstr
,如果我们满足要求(
errorlevel
0
),我们将退出循环

@echo off
setlocal enabledelayedexpansion
for /l %%x in (1,1,1000) do (
    echo %%x
    for /f "delims=" %%i in ('takeown.exe /R /A /F "\\fileserver\share\" /D N ^| findstr /i "Failed processing 0 files"') do (
        set "error=%%i"
        if "!errorlevel!"=="0" goto :end
    )
    echo Finished takeown >> C:\Loopy.txt
    icacls.exe "\\fileserver\share\" /grant "Domain\Group":F /grant "Domain\Group":R /T /C
    echo Finished icacls >> C:\Loopy.txt
    echo Loop %%x >> C:\Loopy.txt
)
goto :eof
:end
echo %error% 

使用
if
goto:label
检查for(代码块)外部的条件是谢谢,takeown命令应该在内部循环中!但这太棒了!非常感谢!真的很有帮助。很抱歉,我可能把事情弄糊涂了,takeown命令会生成循环需要退出的文本。出现“处理0文件失败”后,我将最后一次手动运行icacls命令。因此,它将进入takeown->icacls->takeown->icacls->takeown等,直到takeown命令显示文本。Sorry然后用取下过程替换循环中的
icacls
命令字符串。。i、 e
for/f“delims=“%%i in('takedown…)。
编辑答案以演示我的意思。。您需要修改和测试,因为我无法复制环境。我已经这样做了,但流程似乎没有退出,只是再次启动循环。