首页 > 解决方案 > 批处理文件循环直到显示某些文本

问题描述

目前有一个批处理文件,用于使用 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% 

非常感谢

标签: loopsbatch-fileicacls

解决方案


我认为您可能会以错误的方式遇到错误,因此您需要相应地调整它,但我们使用findstr并且如果我们满足要求(errorlevelis 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% 

推荐阅读