2017-05-04 139 views
0

我有一个脚本,当前查找名为'Avid MediaFiles'的目录中的所有文件/子文件夹并授予完全控制权限并将结果输出到文本文件中。特定文件夹的批处理脚本权限授予

cd /d Y:\UserWorkspaces 
FOR /D /r %%g in ("Avid MediaFiles*") DO icacls "%%g" /grant "Administrators":(OI)(CI)F /T >> Avid_Permissions_Fixed.txt 

与它唯一的问题是,一旦它的运行它修复所有文件/文件夹,不论其许可的状态,即使是之前已经固定的。理想情况下,我想添加一个条件,在该条件下跳过修复已具有完全控制权限的条件并更改那些不具有完全控制权限的条件。批处理脚本是否可行?

回答

0

这是可能的,但会使脚本复杂化很多。
应该没有理由检查权限。如果已设置,再次设置不会造成任何伤害。
您可以检查某些权限是这样的:

icacls . | find "Administrators:(OI)(CI)(F)" 
if errorlevel 1 echo Doesn't have this permission 

,但如果它究竟是不是像(OI)(CI)(F),你就会有假阳性。

你不是要摆脱/T和迭代每个文件夹和文件,如果你不想去到整个ICACLS 困难得多解析。/T输出结构。

可能还有解决问题的另一种方法。找出究竟发生了什么。
如果您不需要为这些文件夹中的特定文件/文件夹的任何特定的权限,如果所有的文件/文件夹有其继承打开,然后进行简单
FOR /D %%g in ("Y:\UserWorkspaces\Avid MediaFiles*") DO icacls %%g /reset /T
应该工作。它将修复从权限受限位置移动到文件夹中的文件的权限。它不会添加任何新的权限,但会删除任何可能的明确权限。

对于任何更复杂的事情,我不打扰也不建议使用批处理。 PowerShell可以非常有效地执行此操作,而且不会出现字符串解析错误的风险。检查一个循环中的所有ACL,修复另一个循环。

btw。没有for /D /r。/r可能被忽略。