bigwim
Goto Top

Eine Frage an die Batch-Großmeister

Moin moin,

ich habe eher eine technische Frage zu einer For-Schleife, die mehr macht als ich möchte - aber ich komm nicht darauf, warum sie es tut. Wenn jemand mal etwas Zeit übrig hat, vielleicht hat jemand eine Erklärung für mich.

Die Batch soll (später mal) einen Abgleich von AD-Gruppen machen. Wir haben immer eine domänenlokale Gruppe und eine domänenglobale Gruppe, die sich durch Namenskonventionen unterscheiden. Äh, besser ein Beispiel.

entscheidene Zeile 23

@echo off & Setlocal

Set Logfile=%~n0.log
Set OU_DG_Gruppen=ou=Benutzergruppen,ou=Gruppen,ou=Institut,dc=...
Set OU_DL_Gruppen=ou=Ressourcen,ou=Gruppen,ou=Institut,dc=...
Set File_DLGruppe=X001GDF
Set File_DGGruppe=X001GGF

echo Suche DL in DG
echo - Filezugriffe
for /f %%t in ('type %file_dlgruppe%.log ^| find /i "%file_dlgruppe%"') do (  
	echo 'type %file_dlgruppe%.log ^| find /i "%file_dlgruppe%"'  >>%Logfile%  
	echo Variable T ist %%t >>%Logfile%
	echo on
	call :FindeGruppe %%t
)

goto :ProtokollEnde

:FindeGruppe
for /f "tokens=1 delims=," %%t in (%1) do (  
	Set tmp=%%t
	Set dlGruppe=%tmp:~11%
)
echo zu %DLGruppe% Gegenstueck suchen ....
Set DGGruppe=
for /f %%t in ('type %file_dggruppe%.log ^| find /i "%File_DGGruppe%-%DLGruppe%"') do Set DGGruppe=%%t  

if not defined DGGruppe (
	echo %file_dlgruppe%-%DLGruppe% ist allein
) else (
  echo Ist %file_dlgruppe%-%DLGruppe% auch verheiratet?
)

goto :eof



Ausgabe mit echo
Suche DL in DG
- Filezugriffe

for /F "tokens=1 delims=," %t in ("CN=X001GDF-350Hauptfa_A,OU=App1-Server,OU=Ressourcen,OU=Gruppen,OU=Institut,DC=...") do (
Set tmp=%t
Set dlGruppe=\U0010896\LOKALE~1\Temp
)

(
Set tmp=CN=X001GDF-350Hauptfa_A
Set dlGruppe=\U0010896\LOKALE~1\Temp
)

echo zu \U0010896\LOKALE~1\Temp Gegenstueck suchen ....
zu \U0010896\LOKALE~1\Temp Gegenstueck suchen ....

Set DGGruppe=

for /F %t in ('type X001GGF.log | find /i "X001GGF-\U0010896\LOKALE~1\Temp"') do Set DGGruppe=%t

echo off
X001GDF-\U0010896\LOKALE~1\Temp ist allein
Ende Ausgabe mit echo


Beim ersten Durchlauf wird mein Temp-Verzeichnis (zusätzlich) untersucht und ich weiß gar, wie meine For-Schleife auf diese Idee kommt.

Unterm Strich möchte ich nichts anderes machen, als eine Textdatei mit einer anderen Textdatei zu vergleichen - und das mittels der For-Schleife. For-Schleife deshalb, weil ich sonst nicht weiß, wie ich die Zeile zerlegen kann. Zu dieser GDF-Gruppe muß es auch eine GGF-Gruppe geben.

Schritt 1 - Zeile aus Datei 1 lesen
Schritt 2 - aus "CN=X001GDF-350Hauptfa_A,OU" den wichtigen Teil "350Hauptfa_A" extrahieren
Schritt 3 - entsprechend Namenskonzept muß es eine Gruppe namens "X001GGF-350Hauptfa_A" geben.

Grundsätzlich läuft es ja auch schon, aber diese erste Zeile im Logfile ....
Danke für jeden hilfreichen Tipp.

Markus


zu lesende Datei sieht so aus:
[Datei1]
Stand vom 02.12.2010 um 15:28:31,86


"CN=X001GDF-350Hauptfa_A,OU=App1-Server,OU=Ressourcen,OU=Gruppen,OU=Institut,DC=..."
[/Datei1]

[Datei2]
Stand vom 02.12.2010 um 15:28:20,11


"CN=X001GGF-350Hauptfa_A,OU=Dateisystemzugriff,OU=Benutzergruppen,OU=Gruppen,OU=Institut,DC=..."
"CN=X001GGF-350Lagler_A,OU=Dateisystemzugriff,OU=Benutzergruppen,OU=Gruppen,OU=Institut,DC=..."
"CN=X001GGF-ABIT_L,OU=Dateisystemzugriff,OU=Benutzergruppen,OU=Gruppen,OU=Institut,DC=..."
"CN=X001GGF-AbitWEB_A,OU=Dateisystemzugriff,OU=Benutzergruppen,OU=Gruppen,OU=Institut,DC=..."
[/Datei2]

Content-Key: 156233

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

Ausgedruckt am: 28.03.2024 um 13:03 Uhr

Mitglied: bastla
bastla 02.12.2010 um 17:54:28 Uhr
Goto Top
Hallo BigWim!
Eine Frage an die Batch-Großmeister
Falls ich auch dürfte ... face-wink

Da Du keine "delayedExpansion" einsetzt, wird zwar ein (neuer) Wert für die Variable "tmp" gesetzt, allerdings interessiert sich der Batch noch nicht dafür, da die Variable %tmp% bereits zu Beginn der Schleife ausgewertet wird - und diese Variable (ein simples "set t" genügt zur Demonstration) enthält defaultmäßig den selben Pfad wie %temp% (und sollte daher auch nicht verändert werden).
Du brauchst übrigens keine "tmp"-Variable zu erfinden - die Zerlegung kannst Du ja auch so vornehmen:
for /f "tokens=2 delims=-," %%t in (%1) do Set "dlGruppe=%%t"
Grüße
bastla
Mitglied: BigWim
BigWim 02.12.2010 um 18:02:34 Uhr
Goto Top
Hallo Bastla,

Falls ich auch dürfte ...
Wenn bisher nicht, dann sicher ab jetzt!

Wieder einmal herzlichen Dank! Das habe ich sogar verstanden.

Dann funktioniert das Ganze ja eher zufällig bzw dürfte ich ja dann im letzten Durchlauf den Wurm drinne haben ....

Was habe gewerkelt, um die Zerlegung geschickt hinzubekommen, und dann so ein Tipp - ein echter Großmeister face-wink

Wieder einmal muß ich jetzt Feierabend machen, aber morgen früh werde ich das sofort einbauen. Hoffentlich kann ich heute ruhig schlafen!

Vielen Dank noch einmal & schönen Abend
Markus
Mitglied: bastla
bastla 02.12.2010 um 18:07:14 Uhr
Goto Top
Hallo BigWim!

Danke für die Ernennung face-smile
Wieder einmal muß ich jetzt Feierabend machen
... ich fühle mit Dir face-wink

Grüße (oder: Gute Nacht)
bastla