Icacls

icacls 重置多個文件夾的繼承權限

  • September 14, 2017

尋找一種更好的方法來為多個文件夾編寫腳本。

現在我有一個 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

有沒有更好的方法來做到這一點,所以我不必繼續為新使用者添加行?

每個使用者文件夾都應用了自己的權限,因此使用者文件夾中的任何內容都會重置其權限,以使用上面的腳本從使用者文件夾繼承。

您可以編寫一個for循環,該循環使用**/d**開關遍歷目錄名稱,

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

您始終可以通過在icacls行前面加上echo來測試循環是否會執行您想要的操作,這將列印命令而不是執行它,

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

為了清楚起見,它在一行上。

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

鑑於下面的文件樹,這是一個小測試

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命令do以檢查命令的實際外觀。

腳本中的 FOR 循環Windows .bat/.cmd 腳本需要%%使用變數加倍,而 shell 只需要一個%,因此在 cmd shell 腳本中,循環如下所示:

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

引用自:https://serverfault.com/questions/868993