Пакетный файл зацикливается, пока не появится определенный текст - PullRequest
1 голос
/ 21 марта 2019

В настоящее время имеется пакетный файл для замены разрешений NTFS с помощью команд takeown и icacls, я добавил эти команды в цикл, и он прекрасно работает.

Есть ли способ выйти из цикла при получении определенного ответаотображается?типа "Ошибка обработки 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% 

Большое спасибо

1 Ответ

1 голос
/ 21 марта 2019

Я думаю, что вы могли ошибочно ошибиться, поэтому вам нужно будет соответствующим образом ее скорректировать, но мы используем 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% 
...