Loops 批处理文件循环,直到显示特定文本
目前有一个使用takeown和icacls命令替换NTFS权限的批处理文件,我已将这些命令添加到循环中,效果非常好 当显示某个响应时,是否有方法退出循环?比如“处理0个文件失败”之类的?下面是我正在使用的代码,希望这也能帮助其他人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
@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、 efor/f“delims=“%%i in('takedown…)。
编辑答案以演示我的意思。。您需要修改和测试,因为我无法复制环境。我已经这样做了,但流程似乎没有退出,只是再次启动循环。