Ersetzen von Textteilen in einer .txt Datei
Hallo erst mal. Ich versuche gerade mit Hilfe einer Batch Datei, Daten aus der AD für den User etwas schöner zu gestallten. Dabei bin ich auf folgendes Problem gestoßen.
Aus der AD werden Informationen in die Datei GroupInfo.txt geschrieben. Diese sieht so aus
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
GG-Servername-AG-ABC-C
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
Die Zeilen welche mit <"CN=> beginnen sollten so editiert werden damit am Ende die Datei so aussehen soll.
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
Username: username Standort: Werk
Username: username Standort: Werk
GG-Servername-AG-ABC-C
Username: username Standort: Werk
Username: username Standort: Werk
Username: username Standort: Werk
Mein Ansatz war bis jetzt erst mal die unnötigen Informationen zu löschen. Das habe ich bis jetzt mit dieser Zeile auch hinbekommen:
Die neue Datei GroupInfo_2.txt sieht demnach so aus:
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
"CN=username OU=Werk
"CN=username OU=Werk
GG-Servername-AG-ABC-C
"CN=username OU=Werk
"CN=username OU=Werk
"CN=username OU=Werk
Was mir jetzt noch fehlt ist das der Text "CN= in Username: und der Text OU= in Standort: geändert wird.
Ich habe mir hierzu schon einige Beiträge hier im Forum angeschaut. Leider habe ich damit für mein Problem noch keine Lösung gefunden.
Idee war es das ich mit einer For-Schleife durch die Datei zu gehe. Als Trennzeichen (delims) wollte ich "=" nehmen. Wird dann die Zeichenfolge "CN gefunden soll diese in Username: geändert. Wird die Ziechenfolge OU gefunden wird diese in Standort: geändert.
Danke schonmal für die Hilfe
Aus der AD werden Informationen in die Datei GroupInfo.txt geschrieben. Diese sieht so aus
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
GG-Servername-AG-ABC-C
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
"CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
Die Zeilen welche mit <"CN=> beginnen sollten so editiert werden damit am Ende die Datei so aussehen soll.
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
Username: username Standort: Werk
Username: username Standort: Werk
GG-Servername-AG-ABC-C
Username: username Standort: Werk
Username: username Standort: Werk
Username: username Standort: Werk
Mein Ansatz war bis jetzt erst mal die unnötigen Informationen zu löschen. Das habe ich bis jetzt mit dieser Zeile auch hinbekommen:
For /F "Tokens=1,3 delims=," %%i in (GroupInfo.txt) Do echo.%%i %%j >>GroupInfo_2.txt
Die neue Datei GroupInfo_2.txt sieht demnach so aus:
Stand: 04.02.2010
GG-Servername-AG-ABC-123-R
"CN=username OU=Werk
"CN=username OU=Werk
GG-Servername-AG-ABC-C
"CN=username OU=Werk
"CN=username OU=Werk
"CN=username OU=Werk
Was mir jetzt noch fehlt ist das der Text "CN= in Username: und der Text OU= in Standort: geändert wird.
Ich habe mir hierzu schon einige Beiträge hier im Forum angeschaut. Leider habe ich damit für mein Problem noch keine Lösung gefunden.
Idee war es das ich mit einer For-Schleife durch die Datei zu gehe. Als Trennzeichen (delims) wollte ich "=" nehmen. Wird dann die Zeichenfolge "CN gefunden soll diese in Username: geändert. Wird die Ziechenfolge OU gefunden wird diese in Standort: geändert.
Danke schonmal für die Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135458
Url: https://administrator.de/contentid/135458
Ausgedruckt am: 25.11.2024 um 18:11 Uhr
6 Kommentare
Neuester Kommentar
Wie wäre es hiermit:
!!!Vorher eine Sicherung erstellen!!!
PS: Ich glaube das Script war von Biber, habe es für deine Zwecke abgeändert.
!!!Vorher eine Sicherung erstellen!!!
@echo off & setlocal
set "Datei=GroupInfo_2.txt"
set R=%temp%\Replace2.vbs
>%R% echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll
>>%R% echo fso.CreateTextFile(F,True).Write Replace(Replace(T,"CN=","Username: "),"OU=","Standort: ")
for %%f in ("%Datei%") do cscript //nologo %R% "%%f"
PS: Ich glaube das Script war von Biber, habe es für deine Zwecke abgeändert.
Moin forcerk,
willkommen im Forum.
Moin DGzRSBorkum natürlich auch.
Mit VBS geht es sicherlich schneller - aber andererseits....
Wenn du gerade mit Batch die ersten (zweiten, dritten) Schritte machst und auch nur das einsetzen willst, was du nachvollziehen und selbst warten kannst...
Dann geht es auch mit der oben skizzerten FOR/F-Anweisung.
Unter den Voraussetzungen, dass
Dann führe als weiteren Delimiter das Gleichheitszeichen ein und schreibe (Demo am CMD-Prompt; führendes ">" nicht mit eintiipen):
Ich denke, das ist für dich nachzuvollziehen und Grundlage für eigene Verfeinerungen.
Obwohl grundsätzlich VBSkript zum Suchen/Ersetzen natürlich besser geeignet ist.... eigentlich.
--> du solltest dann auf VBS gehen, wenn sich die Annahme der "immer gleich strukturierten CN-Zeilen" nicht bestätigt.
Grüße
Biber
willkommen im Forum.
Moin DGzRSBorkum natürlich auch.
Mit VBS geht es sicherlich schneller - aber andererseits....
Wenn du gerade mit Batch die ersten (zweiten, dritten) Schritte machst und auch nur das einsetzen willst, was du nachvollziehen und selbst warten kannst...
Dann geht es auch mit der oben skizzerten FOR/F-Anweisung.
Unter den Voraussetzungen, dass
- du alle "relevanten Zeilen" erkennen kannst, z.B. weil sie mit "CN=" beginnen und
- alle Zeilen den gleichen Aufbau haben (gleiche Anzahl Token in gleicher Reihenfolge)
Dann führe als weiteren Delimiter das Gleichheitszeichen ein und schreibe (Demo am CMD-Prompt; führendes ">" nicht mit eintiipen):
>Set "FindCNZeile=CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
>for /f "delims==, tokens=2,6" %i in ("%FindCNZeile%") do @echo [Ausgabe] Benutzer: %i Standort: %j
[Ausgabe] Benutzer: username Standort: Werk
Ich denke, das ist für dich nachzuvollziehen und Grundlage für eigene Verfeinerungen.
Obwohl grundsätzlich VBSkript zum Suchen/Ersetzen natürlich besser geeignet ist.... eigentlich.
--> du solltest dann auf VBS gehen, wenn sich die Annahme der "immer gleich strukturierten CN-Zeilen" nicht bestätigt.
Grüße
Biber
Hallo forcerk,
in VBS könnte es mit SPLIT und REPLACE so funktionieren.
Nur ein Beispiel anhand einer deiner Zeilen.
Heißt, deine Ausgangsdatei zeilenweise einlesen und jede Zeile so in etwa bearbeiten.
Gruss
Tsuki
in VBS könnte es mit SPLIT und REPLACE so funktionieren.
Nur ein Beispiel anhand einer deiner Zeilen.
MyText = "CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom"
MyText = Replace(MyText,",DC" , "")
MyText = Replace(MyText,",OU" , "")
MyTextSep = Split(MyText, "=")
for i = 0 to Ubound(MyTextSep)
WScript.Echo MyTextSep(i)
next
Gruss
Tsuki