xaero1982
Goto Top

Ordner per Batch erstellen aus Textdatei und Berechtigungen

Hallo Zusammen,

ich möchte mehrere Ordner erstellen.

Die Ordnernamen stehen untereinander in einer Textdatei.

Diese soll ausgelesen werden und entsprechende Ordner erstellen.

Anschließend sollen dem jeweiligen Ordner entsprechende Berechtigungen verpasst werden.

Sicherheitsgruppen mit entsprechenden Mitgliedern sind im AD vorhanden.

Also Berechtigungen für Admin + Sicherheitsgruppe x

Jemand eine Idee? Bei ... hab ich nix gefunden face-sad

VG & Thx im Voraus!

Content-Key: 162841

Url: https://administrator.de/contentid/162841

Printed on: April 25, 2024 at 11:04 o'clock

Member: bastla
bastla Mar 17, 2011 at 10:30:28 (UTC)
Goto Top
Hallo Xaero1982!

Aufgrund Deiner ausführlichen Informationen mal für Windows 2000 (ungetestet):
@echo off & setlocal
set "Liste=D:\Ordnerliste.txt"  

for /f "usebackq delims=" %%i in ("%Liste%") do (  
    md "%%i" 2>nul  
    echo j|cacls "%%i" /G Administratoren:F GruppeX:C  
)
Grüße
bastla
Member: Xaero1982
Xaero1982 Mar 17, 2011 at 16:02:12 (UTC)
Goto Top
Hi Bastla,

Funktioniert wie gewünscht ... vielen Dank face-smile

Erklär mir doch aber mal bitte wofür das :

  • "usebackq delims"
  • 2>nul
  • Echo j |

steht?!

Wills ja auch verstehen ... face-smile

VG & Thx
PS: War das Ironie mit den ausführlichen Informationen?! face-smile
Member: bastla
bastla Mar 17, 2011 at 16:09:36 (UTC)
Goto Top
Hallo Xaero1982!

"usebackq" erlaubt die Verwendung von Dateinamen in Anführungszeichen (würden ansonsten als zu zerlegender Text interpretiert)

"delims=" gibt das oder die Trennzeichen zum Zerlegen der jeweiligen Zeile an - wenn, so wie hier, nach dem "=" nix steht, wird auch nicht zerlegt, sondern die Zeile "am Stück" in die Laufvariable übernommen (wichtig, wenn zB der Ordnername Leerzeichen enthielte, da diese als Default-Trennzeichen gelten)

"2>nul" unterdrückt die Ausgabe von Fehlermeldungen (hier für den Fall, dass der Ordner bereits existierte)

"echo j|" gibt die Antwort auf die Frage, ob Du denn tatsächlich sicher wärst, dass die Berechtigungen neu gesetzt werden sollen, gleich vorweg

Grüße
bastla

P.S.:
PS: War das Ironie mit den ausführlichen Informationen?! face-smile
Wenn Du fragen musst ... face-wink

Tatsächlich hast Du weder ein Betriebssystem (ab Vista gibt es "icacls") genannt, noch den Inhalt der Textdatei näher beschrieben (zB, ob vollständige Pfade oder für jeden Ordner eine oder mehrere zu berechtigende Gruppen enthalten sind, ...).
Member: Xaero1982
Xaero1982 Mar 17, 2011 at 16:16:19 (UTC)
Goto Top
Hi Bastler,

super vielen Dank für die Erklärungen!

VG & Thx

PS: Huch, da hast du natürlich recht face-sad
Server 2008 R2 betrifft das ...

Stimmt, aber ich kann ja vor dem %%i bei md %%i den Pfad angeben oder? Also z.b. G:\
Ansonsten soll erst mal jeweils nur eine Gruppe Zugriff bekommen ... ggf. einzelne Nutzer, aber das muss ich von Hand nachreichen, weil das noch nicht so eindeutig ist ...

Ach ja icacls ... bin ich nicht draus schlau geworden ... face-smile
Member: bastla
bastla Mar 17, 2011 at 16:22:43 (UTC)
Goto Top
Hallo Xaero1982!
ich kann ja vor dem %%i bei md %%i den Pfad angeben oder? Also z.b. G:\
Ja, kannst Du; alternativ auch vorweg per "pushd" in den jeweilgen Ordner wechseln (und danach mit "popd" wieder zurück) - kommt auch darauf an, was ev sonst noch so alles passieren soll ...

Grüße
bastla
Member: Xaero1982
Xaero1982 Mar 18, 2011 at 13:58:24 (UTC)
Goto Top
HI,

also im produktiven Einsatz zeigt sich nun, dass es doch nicht sonderlich effizient ist das so zu machen face-sad

Also was ich noch bräuchte wäre die Möglichkeit die entsprechende Sicherheitsgruppe mit in der Textdatei mit Anzugeben.

Z.b.

Ordnername,Sicherheitsgruppe
Ordnername2,Sicherheitsgruppe2

Weil ja jeder Ordner andere Berechtigungen hat + Administrator

Hast du dazu auch noch eine Idee?

VG & Thx
Member: bastla
bastla Mar 18, 2011 at 15:04:11 (UTC)
Goto Top
Hallo Xaero1982!
Also was ich noch bräuchte wäre die Möglichkeit die entsprechende Sicherheitsgruppe mit in der Textdatei mit Anzugeben.
Hatte ich eigentlich schon erwartet ... face-wink

Wenn es zu jedem Ordner nur eine Gruppe (durch Komma getrennt - und bitte ohne Leerzeichen um das Komma herum) gibt, dann etwa so:
@echo off & setlocal
set "Liste=D:\Ordnerliste.txt"  

for /f "usebackq tokens=1-2 delims=," %%i in ("%Liste%") do (  
    md "%%i" 2>nul  
    echo j|cacls "%%i" /G Administratoren:F %%j:C  
)
Wenn Du auch noch unterschiedliche Berechtigungen zu vergeben hättest, könntest Du gleich
Ordnername,Sicherheitsgruppe:Berechtigung
als Beispiel daher
Testordner,Sicherheitsgruppe1:C
in die Textdatei schreiben und die Rechte-Angabe in der Zeile 6 weg lassen:
echo j|cacls "%%i" /G Administratoren:F %%j
Grüße
bastla
Member: Xaero1982
Xaero1982 Mar 18, 2011 at 16:40:45 (UTC)
Goto Top
Hi Bastler,

hach du bist genial face-smile

Sieht gut aus, bin jetzt aber nicht mehr vor Ort, aber ich denke genau das entspricht den Anforderungen die ich habe face-smile

Wobei ich mich frage: Woher nimmt der sich das "%%j"?
Wofür steht nun das "usebackq tokens=1-2"?

Tausend Dank!

VG & Thx
Member: bastla
bastla Mar 18, 2011 at 16:48:19 (UTC)
Goto Top
Hallo Xaero1982!

Zum "usebackq" sage ich diesmal nix ... face-wink

"tokens=1-2" legt fest, dass die ersten beiden Teilstücke (entstehen durch die Trennung anhand es "delimiters" Komma) der Zeile verwendet werden sollen (Default wäre nur 1. Teil)
Woher nimmt der sich das "%%j"?
Der kennt das Alphabet und weiß daher, was nach "i" kommt face-wink; außerdem weiß er, dass es 2 Teile geben soll - es müssen daher auch 2 Variablen verwendet werden ...

Grüße
bastla
Member: Xaero1982
Xaero1982 Mar 18, 2011 at 18:10:46 (UTC)
Goto Top
Hi Bastla face-smile

Oki doki ... langsam kommt Licht ins Dunkel face-smile

Vielen Dank!

VG