boucle infinie du file batch lors de l'parsing du file

EDIT: Apparemment, je n'ai pas assez de représentant pour répondre à ma propre question, alors la réponse va ici.

D'ACCORD!

ALORS! Je n'ai pas réussi à résoudre le problème … mais j'ai cessé d'utiliser cacls.exe et j'ai commencé à utiliser icacls.exe et maintenant il semble fonctionner à nouveau.

Le file batch ressemble maintenant à ceci:

FOR /F "tokens=*" %%A IN (dirlist.txt) DO echo y| icacls "%%A" /T /C /Grant "Domain Admins":f "Some Group":f "some-security-group":f

Apparemment, cacls est déprécié en 2k8 et ne se comporte pas comme vous en attendez plus …

Je peux peut-être regarder la solution de compétence de Mathieu, car c'est quelque chose qui devrait être fait à nouveau dans l'avenir, et sa manière semble plus propre.

Merci pour votre aide tout le monde!


D'accord, ce devrait être une tâche vraiment simple, mais il s'avère être plus compliqué que je le pense. Je fais clairement quelque chose qui ne va pas et j'aimerais avoir une autre consortingbution.

Ce que j'aimerais faire, c'est parsingr un file contenant des paths vers des directorys et définir des permissions sur ces directorys.

Une ligne d'exemple du file d'input. Il existe plusieurs lignes, toutes formatées de la même manière, avec un path différent vers un directory.

E:\stuff\Things\something else (X)\

(Le file en question est généré sous Cygwin à l'aide de la search pour répertorier tous les directorys avec "(X)" dans le nom. Le file est ensuite passé par unix2win pour le rendre compatible avec Windows. J'ai également essayé de créer manuellement le file d'input à l'intérieur Windows pour exclure la méthode de création du file en tant que problème.)

Voici où je suis bloqué … J'ai écrit le file de commands rapide et sale dans Windows XP et cela a fonctionné sans problème, mais cela ne fonctionnera pas dans le server 2k8.

Code de file par lots pour exécuter le file et définir les permissions:

FOR /F "tokens=*" %%A IN (dirlist.txt) DO echo y| cacls "%%A" /T /C /G "Domain Admins":f "Some Group":f "some-security-group":f

Ce qui est SUPPUT à faire (et fait dans XP) est traversé le file spécifié (dirlist.txt) et exécutez cacls.exe sur chaque directory qu'il tire du file. Le "echo y |" est là pour confirmer automatiquement lorsque les cacls le requestnt avec insistance "êtes-vous sûr?" pour chaque directory de la list.

Malheureusement, cependant, ce qu'il fait est tomber dans une boucle infinie. J'ai essayé d'entourer tout après "DO" avec des guillemets, ce qui empêche la boucle sans fin mais confond les cacls afin qu'il lance une erreur.

Fait intéressant, j'ai essayé d'exécuter le code après "DO" manuellement (évidemment remplaçant la variable avec le path complet, copié directement du file) à l'invite de commands et s'exécute comme prévu. Je ne pense pas que ce soit le file ou la boucle, car l'ajout de quotes à la command à exécuter empêche la boucle de continuer son passé où il est censé … Je n'ai vraiment aucune idée à ce stade. Toute aide serait appréciée. J'ai l'printing que ça va être quelque chose de stupide … mais je me retire les cheveux, alors je pensais que je requestrais.

One Solution collect form web for “boucle infinie du file batch lors de l'parsing du file”

Accepteriez-vous d'utiliser powershell? Il pourrait faire tout le travail, même en évitant la partie cygwin.

La première façon est de faire la boucle via powershell:

 $dirlist=Get-Content dirlist.txt foreach ($dir in $dirlist) { write-output "doing $dir" echo y | cacls "$dir" /T /C /G "Domain Admins":f "Some Group":f "some-security-group":f } 

Utiliserait-il beaucoup plus de pouvoirs en utilisant cet outil pour modifier ACL:

 $dirlist=Get-Content dirlist.txt foreach ($dir in $dirlist) { write-output "doing $dir" $acl=(get-item $dir).GetAccessControl() $colRights = [System.Security.AccessControl.FileSystemRights]::FullControl $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None $objType =[System.Security.AccessControl.AccessControlType]::Allow $objUser = New-Object System.Security.Principal.NTAccount("wingroup\kenmyer") $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($objUser, $colRights, $InheritanceFlag, $PropagationFlag, $objType) $acl.AddAccessRule($objACE) } 

Vous findez plus de détails ici: http://technet.microsoft.com/en-us/library/ff730951.aspx

  • DFS partage vide lorsque vous l'accédez via le nom de domaine
  • Impossible d'accéder à la configuration de l'ordinateur> Preferences ou configuration de l'user> Preferences
  • Serveur 2008R2 L'authentification RemoteApp a demandé deux fois
  • Utiliser les profils obligatoires sur le server hôte de session RD
  • Logiciel Windows Server 2008 R2 Raid-5 slow over network
  • NSClient ++ FAIL sur Windows 2008 R2 - PDHCollector.cpp (215) Impossible d'interroger les counturs de performance
  • Comment get le path physique d'un VHD monté dans Windows Server 2008 R2
  • Le problème et le server SMTP du port 25 ont été perdus au milieu de la transaction
  • Configuration des profils itinérants
  • L'application des autorisations pour partager supprime les autorisations sur le dossier local win 2008 r2
  • Impossible de faire un ping sur un server après avoir configuré les services de routing et d'access distant
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.