forcerk
Goto Top

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:

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

Content-ID: 135458

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

Ausgedruckt am: 25.11.2024 um 18:11 Uhr

86263
86263 08.02.2010 um 16:40:18 Uhr
Goto Top
Wie wäre es hiermit:
!!!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.
forcerk
forcerk 08.02.2010 um 17:21:08 Uhr
Goto Top
Danke DGzRSBorkum

Eine Lösung mittels vbs Script hatte ich auch schon probiert.
Da ich aber noch so gut wie nie mit vbs gearbeitet hatte bin ich nie auf die richtige Lösung gekommen.

Deine Lösung funktioniert wunderbar.
Dann schau ich mal das ich den Quellcode verstehe, man will ja auch etwas lernen und nicht nur abschreiben face-smile
Biber
Biber 08.02.2010 um 17:23:30 Uhr
Goto Top
Moin forcerk,

willkommen im Forum.

Moin DGzRSBorkum natürlich auch.face-wink

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
forcerk
forcerk 08.02.2010 um 17:34:22 Uhr
Goto Top
Habe noch eine weitere Frage face-smile

Ist es möglich innerhalb des vbs Scripts die gesuchte Zeichenfolge als Variable auszudrücken?

Ziel ist es mit Hilfe des Usernamen, den Befehlen dsquery und dsget, den Usernamen in Vor- und Nachname aufzulösen und an die Zeile hinzufügen.
TsukiSan
TsukiSan 09.02.2010 um 03:35:05 Uhr
Goto Top
Hallo forcerk,

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
Heißt, deine Ausgangsdatei zeilenweise einlesen und jede Zeile so in etwa bearbeiten.

Gruss
Tsuki
forcerk
forcerk 10.02.2010 um 16:29:32 Uhr
Goto Top
Danke nochmal für eure Hilfestellung.
Ich habe mich für eine Lösung per VBS entschieden.