icacls redefinir permissões herdadas em várias pastas

1

Procurando por uma maneira melhor de criar scripts para várias pastas.

Neste momento, tenho um script icacls que está resetando permissões em arquivos / pasta de uma pasta pai:

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

Existe uma maneira melhor de fazer isso, então não preciso continuar adicionando linhas para novos usuários?

Cada pasta de usuário tem suas próprias permissões aplicadas a ele, para que qualquer item dentro da pasta de usuários receba suas permissões redefinidas para herdar da pasta de usuários usando o script acima.

    
por Jay501 16.08.2017 / 18:29

1 resposta

0

Você pode escrever um loop para que percorra nomes de diretório com a opção / d ,

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

Você sempre pode testar se o loop vai fazer o que você deseja, adicionando a linha icacls com um echo , que imprimirá o comando em vez de executá-lo,

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

Aqui está em uma linha, para maior clareza.

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

Aqui está um teste pequenino, dada a árvore de arquivos abaixo

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

Você sempre pode adicionar o @echo após o do para verificar a aparência real do comando antes de executá-lo.

Os em scripts do Windows .bat / .cmd exigem o dobro de %% com variáveis, enquanto o shell requer apenas um único % , portanto, em um script de shell cmd, o loop assim:

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

Tags