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

Ersetzen von Textteilen in einer .txt Datei

Frage Entwicklung Batch & Shell

Mitglied: forcerk

forcerk (Level 1) - Jetzt verbinden

08.02.2010 um 16:20 Uhr, 4459 Aufrufe, 6 Kommentare

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:

01.
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
Mitglied: MisterExpulso
08.02.2010 um 16:40 Uhr
Wie wäre es hiermit:
!!!Vorher eine Sicherung erstellen!!!

01.
@echo off & setlocal 
02.
set "Datei=GroupInfo_2.txt" 
03.
 
04.
set R=%temp%\Replace2.vbs 
05.
>%R%  echo F=WScript.Arguments(0):Set fso=CreateObject("Scripting.FileSystemObject"):T=fso.OpenTextFile(F).ReadAll 
06.
>>%R% echo fso.CreateTextFile(F,True).Write Replace(Replace(T,"CN=","Username: "),"OU=","Standort: ")  
07.
 
08.
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.
Bitte warten ..
Mitglied: forcerk
08.02.2010 um 17:21 Uhr
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
Bitte warten ..
Mitglied: Biber
08.02.2010 um 17:23 Uhr
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
  • 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):
01.
>Set "FindCNZeile=CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom" 
02.
 
03.
>for /f "delims==, tokens=2,6" %i in ("%FindCNZeile%") do @echo [Ausgabe] Benutzer: %i Standort: %j 
04.
[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
Bitte warten ..
Mitglied: forcerk
08.02.2010 um 17:34 Uhr
Habe noch eine weitere Frage

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.
Bitte warten ..
Mitglied: TsukiSan
09.02.2010 um 03:35 Uhr
Hallo forcerk,

in VBS könnte es mit SPLIT und REPLACE so funktionieren.
Nur ein Beispiel anhand einer deiner Zeilen.
01.
MyText = "CN=username,OU=USERS,OU=Werk,OU=Land,OU=Firma,DC=Domain,DC=dom" 
02.
 
03.
MyText = Replace(MyText,",DC" , "") 
04.
MyText = Replace(MyText,",OU" , "") 
05.
 
06.
MyTextSep = Split(MyText, "=") 
07.
 
08.
for i = 0 to Ubound(MyTextSep) 
09.
	WScript.Echo MyTextSep(i) 
10.
next
Heißt, deine Ausgangsdatei zeilenweise einlesen und jede Zeile so in etwa bearbeiten.

Gruss
Tsuki
Bitte warten ..
Mitglied: forcerk
10.02.2010 um 16:29 Uhr
Danke nochmal für eure Hilfestellung.
Ich habe mich für eine Lösung per VBS entschieden.
Bitte warten ..
Ähnliche Inhalte
Windows 7
gelöst TXT-Datei plötzlich 0 KByte groß (15)

Frage von SebastianJu zum Thema Windows 7 ...

Batch & Shell
gelöst TXT Datei bleibt nach Erstellung leer - woran liegt es? (14)

Frage von Komoran12 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Heiß diskutierte Inhalte
Windows Systemdateien
NTFS und die Defragmentierung (26)

Frage von WinLiCLI zum Thema Windows Systemdateien ...

LAN, WAN, Wireless
Zwei Subnetze mit je eigenem Router und Internetzugang verbinden (18)

Frage von hannsgmaulwurf zum Thema LAN, WAN, Wireless ...

Windows Server
WIndows Server 2016 core auf dem Intel NUC NUC5i5RYK i5 5250U (17)

Frage von IxxZett zum Thema Windows Server ...