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
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]
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]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 156233
Url: https://administrator.de/forum/eine-frage-an-die-batch-grossmeister-156233.html
Ausgedruckt am: 22.12.2024 um 12:12 Uhr
3 Kommentare
Neuester Kommentar
Hallo BigWim!
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 "
Du brauchst übrigens keine "tmp"-Variable zu erfinden - die Zerlegung kannst Du ja auch so vornehmen:
Grüße
bastla
Eine Frage an die Batch-Großmeister
Falls ich auch dürfte ... 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"
bastla