正在寻找一种更好的方法来为多个文件夹编写脚本。
现在我有一个 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