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

有没有更好的方法可以做到这一点,这样我就不必继续为新用户添加线路?

每个用户文件夹都应用了自己的权限,因此,使用上述脚本,用户文件夹内的任何内容都会重置其权限以从用户文件夹继承。

答案1

您可以写为了循环遍历目录名称,并使用/天转变,

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

你可以随时测试循环是否按照你的要求执行,方法是在循环前面添加伊卡克尔斯回声,它将打印命令而不是执行它,

@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

相关内容