特定文件夹

时间:2017-05-04 13:40:37

标签: batch-file directory icacls

我有一个脚本,目前在名为“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

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

1 个答案:

答案 0 :(得分:0)

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

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

但如果它与(OI)(CI)(F)不完全一样,那么你就会出现误报。

如果你不想对整个icacls 进行更难解析,你将不得不摆脱/T并迭代每个文件夹和文件。 / T输出结构。

你的问题可能还有另外一种方法。找出究竟发生了什么。
如果您对这些文件夹中的特定文件/文件夹不需要任何特定权限,并且所有文件/文件夹的继承都已打开,那么一个简单的
FOR /D %%g in ("Y:\UserWorkspaces\Avid MediaFiles*") DO icacls %%g /reset /T
应该管用。它将修复从权限受限位置移动到文件夹中的文件的权限。它不会添加任何新权限,但会删除任何可能的显式权限。

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

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