Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Eine Frage an die Batch-Großmeister

Frage Entwicklung Batch & Shell

Mitglied: BigWim

BigWim (Level 2) - Jetzt verbinden

02.12.2010, aktualisiert 17:38 Uhr, 2735 Aufrufe, 3 Kommentare

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

01.
@echo off & Setlocal 
02.
 
03.
Set Logfile=%~n0.log 
04.
Set OU_DG_Gruppen=ou=Benutzergruppen,ou=Gruppen,ou=Institut,dc=... 
05.
Set OU_DL_Gruppen=ou=Ressourcen,ou=Gruppen,ou=Institut,dc=... 
06.
Set File_DLGruppe=X001GDF 
07.
Set File_DGGruppe=X001GGF 
08.
 
09.
echo Suche DL in DG 
10.
echo - Filezugriffe 
11.
for /f %%t in ('type %file_dlgruppe%.log ^| find /i "%file_dlgruppe%"') do ( 
12.
	echo 'type %file_dlgruppe%.log ^| find /i "%file_dlgruppe%"'  >>%Logfile% 
13.
	echo Variable T ist %%t >>%Logfile% 
14.
	echo on 
15.
	call :FindeGruppe %%t 
16.
17.
 
18.
goto :ProtokollEnde 
19.
 
20.
:FindeGruppe 
21.
for /f "tokens=1 delims=," %%t in (%1) do ( 
22.
	Set tmp=%%t 
23.
	Set dlGruppe=%tmp:~11% 
24.
25.
echo zu %DLGruppe% Gegenstueck suchen .... 
26.
Set DGGruppe= 
27.
for /f %%t in ('type %file_dggruppe%.log ^| find /i "%File_DGGruppe%-%DLGruppe%"') do Set DGGruppe=%%t 
28.
 
29.
if not defined DGGruppe ( 
30.
	echo %file_dlgruppe%-%DLGruppe% ist allein 
31.
) else ( 
32.
  echo Ist %file_dlgruppe%-%DLGruppe% auch verheiratet? 
33.
34.
 
35.
goto :eof 
36.
 


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]
Mitglied: bastla
02.12.2010 um 17:54 Uhr
Hallo BigWim!
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"
Grüße
bastla
Bitte warten ..
Mitglied: BigWim
02.12.2010 um 18:02 Uhr
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

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
Bitte warten ..
Mitglied: bastla
02.12.2010 um 18:07 Uhr
Hallo BigWim!

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

Grüße (oder: Gute Nacht)
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Kl. Frage: Log-File schreiben per Batch (3)

Frage von Yauhun zum Thema Batch & Shell ...

Batch & Shell
Dateinamen nach Zeichnen abschneiden - Batch-Shell (9)

Frage von cberndt zum Thema Batch & Shell ...

Batch & Shell
CMD Verschlüsslung ( Batch ) (11)

Frage von clragon zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...