0

这是一个有趣的问题,所以请在这里耐心等待:

我有三个级别的嵌套文件夹,用于将文件同步到最终用户设备 - 第一级管理员具有权限,第二级最终用户具有(显式和个人)权限,第三级有内容(文件和通常更多的文件夹)。

当(偶尔)被移动到第三级的内容没有从它上面的文件夹继承权限时,就会出现问题 - 所以我们的用户最终会在他们的目录中获得他们没有权限的内容(因此,无法同步数据)。

为了解决这个问题,我正在尝试编写一个批处理脚本(按每日计划运行),该脚本深入到第三级文件夹并在那里重置 ACL 上的继承标志。重要的是,此脚本不会触及二级文件夹的权限(因为它将删除最终用户的显式权限)。

这是我正在使用的脚本(是的,它非常简单):

SET base=C:\testPrivate
SET subfolders=.\*

FOR /r %base% %%a in (.) do 
        (
        icacls.exe %subfolders% /reset /t
        )
exit /b

我目前正在尝试构建的脚本的问题是它重置了它正在处理的任何目录下所有内容(包括第二级)的权限。

是否有我可以使用的标志或变量获取 /r 标志的工作目录并将其提供给 %subfolders%,以便 icacls 仅处理第三级文件夹?

4

3 回答 3

0

基于 Endoro 的代码(删除 echo 以启用命令) - 但它适用于第三级文件夹。在设置权限而不是在文件本身上设置权限时,这是否足够好?然后他们会从文件夹继承权限吗?

@echo off &setlocal
pushd "c:\testPrivate"
for /f "delims=" %%i in ('dir /ad /b /s ^| findstr \\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t
popd
pause

如果不是,那么这适用于第三级文件:

@echo off &setlocal
pushd "c:\testPrivate"
for /f "delims=" %%i in ('dir /a-d /b /s ^| findstr \\.*\\.*\\.*\\ ^| findstr /v \\.*\\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t
popd
pause
于 2013-05-09T10:36:40.617 回答
0

试试这个并删除echo如果输出正常:

@echo off &setlocal
pushd "c:\testPrivate"
for /f "delims=" %%i in ('dir /a /b /s^| findstr \\.*\\.*\\.*\\') do echo icacls.exe "%%~fi" /reset /t
popd
于 2013-05-08T17:42:03.317 回答
0

感谢大家和我一起研究这个问题——我设法让我的脚本在稍加修改的情况下工作:

SET base=C:\testPrivate
SET CurrentDate=%date:~-4,4%%date:~-7,2%%date:~-10,2%
SET CurrentTIme=%time:~-11,2%%time:~-8,2%%time:~-5,2%

FOR /d %%a in (%base%\*) do (icacls.exe %%a\* /t /reset >> %base%\InheritanceReset-%currentdate%.%currenttime%.txt)
exit /b

此批处理脚本正确探索每个 3 级目录并重置其中每个对象的继承,而无需修改父(第 2 级)或根(第 1 级)文件夹。它还将其操作输出到带有日期/时间戳记的日志文件。

我希望这对其他人来说会派上用场——我知道这让我有一段时间摸不着头脑。

于 2013-05-09T17:11:01.563 回答