Aujourd'hui, un petit retour au Batch ... (<= Jeu de mot débile.. retour/boucle .. nan ? ok j'me cache)
Une utilisatrice a souhaitée avoir une liste des droits attribués sur un dossier à sa charge sur le réseau.
LE reflex du geek => "Super, on Batch !"
But du jeu : avoir les droits descendus sur tous les sous-dossier d'un Folder particulier.
Les armes :
¤ - le fameux FOR pour initialiser la boucle accompagné d'un /D pour scanner un dossier, d'un /R pour avoir les droits appliqués sur les sous dossiers et fichiers. Ici, on utilisera le /F à partir d'un fichier texte, généré par ...
¤ - ... Le DIR qui sert à regarder à l’intérieur d'un dossier
¤ - Le CACLS, une commande permettant de lister les droits d'un dossier/fichier ou/et de les changer de manière massive (Toujours bon a retenir celui la)
Le jeu se déroule en deux manches. Dans la première ont commence par lister les dossiers avec la commande :
Dir destination /A:D /B /S > D:\ListeRep.txt
Explication de la commande : DIR est la commande qui sert à Lister l’intérieur d'un dossier les arguments :
/A:D Afin de cibler les dossiers
/B Permet d'obtenir les chemins
/S Récurrence sur les sous dossiers du dossier visé
> destination Va écrire le résultat dans un fichier
Deuxième partie, ont applique la boucle FOR qui sert à répéter une action a exécuter tant que la condition est vraie. Ici la condition va être la présence d'un dossier.
La commande est la suivante :
FOR /F "Usebackq delims=;" %%i in (D:\ListeRep.txt) do (
CACLS %%i >> D:\LogListeRep.log
)
Cela parait un peu barbare.
Explications :
FOR est la commande qui initialise la boucle
/F Permet de lire un fichier texte il peut être comme ici suivis d'arguments
Usebackq Indique au programme que des arguments complexes vont être utilisés
delims=; Va indiquer à la commande que les lignes doivent êtres envoyés en entier jusqu'à la rencontre d'un délimitateur, ici ; mais on peut utiliser autre chose.
%%i Est la variable remplis par les résultats. Ont batch, donc on double le "%"
in() L'emplacement du fichier liste
CACLS Ont demande à chaque occurence trouvée d'appliquer la commande CACLS qui permet de lister les droits sur un dossier (d'où l'indication de la variable %%i juste derrière)
>> Permet de rajouter des lignes au fichier créé précédemment.
Voila la commande au complet. J'ai initier un Pause>null au milieu du programme afin de rajouter des guillemets et un ; a la fin de chaque lignes avec Notepad++ par manque de temps.
Cela donne au final :
@Echo Off
Echo %Date% > D:\LogListeRep.log
Echo %Time% >> D:\LogListeRep.log
Dir \\Destination /A:D /B /S > D:\ListeRep.txt
Pause>Null
FOR /F "Usebackq delims=;" %%i in (D:\ListeRep.txt) do (
CACLS %%i >> D:\LogListeRep.log
)
Voilà, pas très compliqué mais sacrément utile
A noter qu'une extraction sous Excel est tout à fait possible en replaçant le .log par un .xls, mais il faudra le trier pour que cela soit exploitable.
Au plaisir ...