【问题标题】:Batch File looping until certain text is displayed批处理文件循环直到显示某些文本
【发布时间】:2019-03-21 12:35:40
【问题描述】:

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

非常感谢

【问题讨论】:

  • ifgoto :label在for(代码块)外检查条件

标签: loops batch-file icacls


【解决方案1】:

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

@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% 

【讨论】:

  • 是的,谢谢,takeown 命令应该在内部循环中!但这太棒了!非常感谢!真的很有帮助。
  • 对不起,我可能混淆了,takeown 命令生成循环需要退出的文本。在出现“处理 0 个文件失败”之后,我将最后一次手动运行 icacls 命令。所以它会走 takeown -> icacls -> takeown -> icacls -> takeown 等,直到从 takeown 命令显示文本。对不起
  • 然后只需将循环中的icacls命令字符串替换为删除过程..即for /f "delims=" %%i in ('takedown...)...
  • 已编辑答案以说明我的意思。您需要修改和测试,因为我无法复制环境。
  • 我已经这样做了,但是进程似乎没有退出它只是再次开始循环。
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2011-07-19
  • 2023-03-23
  • 2023-04-08
  • 1970-01-01
  • 2013-01-24
相关资源
最近更新 更多