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

唯一的问题是,一旦它运行,它会修复所有文件/文件夹,无论其权限状态如何,即使是之前已修复的文件/文件夹。理想情况下,我想添加一个条件,在该条件下它跳过修复已经拥有完全控制权限的那些并更改那些没有的。仅使用批处理脚本可行吗?

4

1 回答 1

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
应该可以工作。它将修复从权限受限位置移动到文件夹中的文件的权限。它不会添加任何新权限,但会删除任何可能的显式权限。

对于更复杂的事情,我不会打扰也不推荐使用 Batch。PowerShell 可以非常有效地做到这一点,并且没有字符串解析错误的风险。在一个循环中检查所有 ACL,在另一个循环中修复。

顺便提一句。没有for /D /r。/r 可能被忽略。

于 2017-08-13T19:58:26.150 回答