Назад | Перейти на главную страницу

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 %A in (e:\FTP_Root\user*) do (
    icacls "%A\*" /q /c /t /reset
)

Вы всегда можете проверить, будет ли цикл делать то, что вы хотите, добавив icacls линия с эхо, который будет печатать команду, а не выполнять ее,

@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 требуют удвоения %% с переменными, тогда как оболочке требуется только один %, поэтому в сценарии оболочки cmd цикл будет выглядеть так:

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