Icacls
icacls 重置多個文件夾的繼承權限
尋找一種更好的方法來為多個文件夾編寫腳本。
現在我有一個 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