icacls重置多个文件夹的inheritance权限

寻找更好的方法来为多个文件夹编写脚本。

现在我有一个icacls脚本重置父文件夹中的文件/文件夹的权限:

icacls "e:\FTP_Root\user1\*" /q /c /t /reset icacls "e:\FTP_Root\user2\*" /q /c /t /reset icacls "e:\FTP_Root\user3\*" /q /c /t /reset 

有没有更好的方法来做到这一点,所以我不必为新用户添加行数?

每个用户文件夹都有其自己的权限应用到它,所以用户文件夹内的任何内容都将使用上述脚本将权限重置为从用户文件夹inheritance。

你可以写一个for循环,用/ d开关循环目录名,

 for /d %A in (e:\FTP_Root\user*) do ( icacls "%A\*" /q /c /t /reset ) 

您可以随时通过在icacls行中添加回显来testing循环是否会执行所需操作,这将会打印命令而不是执行它,

 @echo icacls "%A\*" /q /c /t /reset 

为了清晰起见,这是一条线。

 for /d %A in (e:\FTP_Root\user*) do icacls "%A\*" /q /c /t /reset 

下面是一个小testing,给出下面的文件树

 E:\FTP_ROOT | +---user1 | bar.txt | baz.txt | foo.txt | +---user2 | bar.txt | baz.txt | foo.txt | \---user3 bar.txt baz.txt foo.txt C:\>for /d %A in (e:\FTP_Root\user*) do icacls "%A\*" /q /c /t /reset C:\>icacls "e:\FTP_Root\user1\*" /q /c /t /reset Successfully processed 3 files; Failed processing 0 files C:\>icacls "e:\FTP_Root\user2\*" /q /c /t /reset Successfully processed 3 files; Failed processing 0 files C:\>icacls "e:\FTP_Root\user3\*" /q /c /t /reset Successfully processed 3 files; Failed processing 0 files 

您可以随时添加@echo来检查该命令在实际运行之前的实际外观。

在脚本中使用FOR循环 Windows .bat / .cmd脚本需要将%%variables加倍,而shell只需要一个% ,所以在cmd shell脚本中,循环如下所示:

  for /d %%A in (e:\FTP_Root\user*) do icacls "%%A\*" /q /c /t /reset