这是在 Windows 7 中。
我有多个高级文件夹。每个高级文件夹都有一大堆子文件夹。
我需要指定一个组对高级别文件夹“只读”,但对每个子文件夹和所有较低级别的文件夹“读写”。
我认为我可以分两步完成此操作:
使用“此文件夹、子文件夹和文件”在高文件夹级别分配“读写”权限。此步骤有效,组将一直获得读写权限。
再次打开高级文件夹,并为试图限制的组指定“只读”,但这次我在应用时选择“仅限此文件夹”。此步骤不起作用。
我认为第 2 步会将每个子文件夹保留为“读写”,并仅将“只读”应用于顶级文件夹。但是第 2 步之后,所有子文件夹(一直向下)也变为“只读”。
我认为这是因为所有子文件夹都继承了权限。我原本以为使用“仅限此文件夹”设置不同的权限会禁用继承以允许我设置的不同权限,但事实并非如此。
如果我打开目录,选择所有子文件夹,然后右键单击“属性”,它不会让我一次设置多个文件的权限。它只允许我一次设置一个权限。
我不想手动设置数千个文件权限。有什么帮助吗?
谢谢,
汤匙。
答案1
我有多个高级文件夹。每个高级文件夹都有一大堆子文件夹。
我需要指定一个组对高级别文件夹“只读”,但对每个子文件夹和所有较低级别的文件夹“读写”。
根据您的问题、您的评论澄清以及对高级 [父] 文件夹将具有只读访问权限的确认。同时确认所有子文件夹(以及每个子文件夹内的文件)都将获得修改访问权限,因此下面是在批处理 FOR 循环中执行此操作的两个示例;一个是批处理脚本,另一个是复制并粘贴到命令行中。
设置变量
SET TopFolder=
:- 将值设置
SET TopFolder=
为等于 [parent] 根级文件夹,并带有完整路径和文件夹名称。循环将根据此文件夹下存在的内容设置权限,授予显式修改 NFTS ACL 访问权限。
- 将值设置
SET UserOrGroupName=
:- 将值设置
SET UserOrGroupName=
为等于用户帐户名或安全组名(即<LocalUserName>
、<LocalGroupName>
、<Domain>\<UserName>
或<Domain>\<GroupName>
)。
- 将值设置
命令行复制示例
@ECHO ON
SET TopFolder=C:\Users\User\Desktop\HighLevelFolder\Parent1
SET UserOrGroupName=User
::: Grant top folder read and execute access and have beneath folders and files inherit these permissions.
ICACLS "%TopFolder%" /grant:r "%UserOrGroupName%":(OI)(CI)RX
::: Iterate the subfolders beneath the [parent] root-level folder to grant the explicit modify access
FOR /F "TOKENS=*" %G IN ('DIR /B /AD "%TopFolder%\*"') DO ICACLS "%TopFolder%\%~G" /grant:r "%UserOrGroupName%":(OI)(CI)M
GOTO EOF
批处理脚本示例
@ECHO ON
SET TopFolder=C:\Users\User\Desktop\HighLevelFolder\Parent1
SET UserOrGroupName=User
::: Grant top folder read and execute access and have beneath folders and files inherit these permissions.
ICACLS "%TopFolder%" /grant:r "%UserOrGroupName%":(OI)(CI)RX
::: Iterate the subfolders beneath the [parent] root-level folder to grant the explicit modify access
FOR /F "TOKENS=*" %%G IN ('DIR /B /AD"%TopFolder%\*"') DO ICACLS "%TopFolder%\%%~G" /grant:r "%UserOrGroupName%":(OI)(CI)M
GOTO EOF
进一步阅读和来源
我使用了这些 ICACLS 选项:
/grant[:r] Sid:perm grants the specified user access rights. With :r,
the permissions replace any previously granted explicit permissions.
Without :r, the permissions are added to any previously granted
explicit permissions.
perm is a permission mask and can be specified in one of two forms:
a sequence of simple rights:
M - modify access
RX - read and execute access
inheritance rights may precede either form and are applied
only to directories:
(OI) - object inherit
(CI) - container inherit
答案2
在高文件夹级别分配“读写”权限,使用“此文件夹、子文件夹和文件”这一步奏效了,小组的读写能力得到了极大的提升。
这是海报“汤姆”出错的地方。
他应该在此步骤中将“应用于”值设置为仅限子文件夹和文件。
您可以通过将目录的访问权限(例如 RX)设置为“仅限此文件夹”来限制用户对目录的访问,前提是您将其子对象的访问权限(例如 FULL)设置为“仅限子文件夹和文件”。否则设置会发生冲突,Windows 7 将拒绝更改或以您不希望的其他方式应用它。
Tom 的手动操作比解决 icacls.exe 的恐怖要容易得多,但理论上,可以通过以下方法获得相同的结果(但我从来没有这样做过,除非先删除所有遗传权利,并删除所有明确的权限,并删除对象上的所有其他用户或对对象上的每个用户执行此操作):
我首先仅对子对象设置完全访问权限 -
icacls.exe "%directory%" /T /grant:r %username%:(OI)(CI)(IO)F
然后我限制用户对目录本身的访问 -
icacls.exe "%directory%" /grant:r %username%:(RX,WDAC,WO,WD,AD,WEA,DC)