2013-08-21 73 views
0

假设我有一个包含许多嵌套子目录的目录myDir树。我授予完全访问此目录及其所有文件和嵌套子目录到myUser与命令:如何从批处理文件中的cacls处理中排除子目录

cacls myDir /T /E /G myUser:F

到目前为止,这么好。

现在我有一个子目录myDir/A/B/C,我想从cacls处理中排除。也就是说,我不想授予myUser访问此子目录。

你会建议什么?

最简单的方法就是在运行cacls之前将此文件夹移动到另一个地方并在此之后将其移回。是否有意义?

+0

你有没有尝试过呢? – captcha

+0

另一种解决方案是添加第二个命令,从文件夹中删除“myuser”访问权限。 – foxidrive

回答

1

您需要生成要处理的文件列表,并排除不想要的文件列表,因为CACLS不允许过滤。

在这里,我使用“dir”来生成要处理的文件列表。 你也可以使用“forfiles”。

(您可以使用管道使脚本更紧凑,但我使用的是临时文件,而不是为了使其更清晰)。

@echo off 
setlocal 

set TMPFILE=%TEMP%\dirs.txt 
set TMPFILE2=%TEMP%\dirs2.txt 

@rem Generate the list of dir names to be processed 
dir "%~1" /ad /s /b /p > %TMPFILE% 

@rem Filter out the unwanted ones 
findstr /i /v /C:"myDir\A\B\C" < %TMPFILE% > %TMPFILE2% 

@rem And execute a command on each 
for /F "delims=;" %%x in (%TMPFILE2%) do call :dostuff "%%x" 

goto :EOF 

:dostuff 
    @rem do the directory itself 
    cacls "%~1\ /E /G myUser:F 

    @rem do the files 
    cacls "%~1\*" /E /G myUser:F 

    goto :EOF 
3

继承的文件夹权限都显示为:

OI - 对象继承 - 此文件夹和文件。 (没有继承到子文件夹)
CI - 容器继承 - 此文件夹和子文件夹。
IO - 仅继承 - ACE不适用于当前文件/目录

这些可以组合为folllows:
(OI)(CI)此文件夹,子文件夹和文件。
(OI)(CI)(IO)仅子文件夹和文件。
(CI)(IO)仅子文件夹。
(OI)(IO)仅文件。

所以BUILTIN \管理员:(OI)(CI)F表示,这两个文件和子目录将继承 'F'(Fullcontrol)
类似(CI)R意味着目录将继承 'R'(只读文件夹=列表权限)

要改变一个文件夹/目录的继承使用iCACLS /grantiCACLs /deny

+0

问题是关于如何让cacls在处理整个树时不会占据特定文件夹的权限。 权限是在每个对象上设置的,并且继承不是自动的。只需设置要继承的权限不会更改任何现有子级的权限 - 它基本上只是用作创建新子级时使用的默认ACL模板。 – joeking

相关问题