Wörter in Anführungsstrichen in einer Zeile einer txt in einem anderen Format in neue txt schreiben
Hallo,
es gibt eine Menge Fragen, die dieses Thema behandeln, aber da ich bezüglich Batch-Dateien nicht viel Ahnung habe und mein Problem etwas spezieller ist, konnte ich mir aus den Themen nicht die Lösung zusammenbasteln... Hoffe ihr könnt mir helfen:
Ich habe eine txt Datei, die in jeder Zeile eine Menge stehen hat, unter anderem auch Host:"derhost" sowie Passwort:"daspw" und User:"deruser".
Nun bräuchte ich eine Batch, die jede Zeile dieser txt Datei ausliest und diese Information in eine neue txt Datei schreibt im Format:
ftp://deruser:daspw@derhost
Hier die ersten 3 Zeilen der Datei. Jede weitere Zeile ist gleich aufgebaut, aber die "Variablen" sind logischerweise unterschiedlich lang.
Vielen Dank für Hilfe
Gruß
es gibt eine Menge Fragen, die dieses Thema behandeln, aber da ich bezüglich Batch-Dateien nicht viel Ahnung habe und mein Problem etwas spezieller ist, konnte ich mir aus den Themen nicht die Lösung zusammenbasteln... Hoffe ihr könnt mir helfen:
Ich habe eine txt Datei, die in jeder Zeile eine Menge stehen hat, unter anderem auch Host:"derhost" sowie Passwort:"daspw" und User:"deruser".
Nun bräuchte ich eine Batch, die jede Zeile dieser txt Datei ausliest und diese Information in eine neue txt Datei schreibt im Format:
ftp://deruser:daspw@derhost
Hier die ersten 3 Zeilen der Datei. Jede weitere Zeile ist gleich aufgebaut, aber die "Variablen" sind logischerweise unterschiedlich lang.
1
2
3
2
3
<Site Name="apple" Host="apple.com" Port="21" User="stevey" RemoteDir="" LocalDir="" Pass="01807254095081091089001004" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/>
<Site Name="google" Host="google.com" Port="21" User="eric666" RemoteDir="" LocalDir="" Pass="0990850700690640857075084116118112" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/>
<Site Name="microsoft" Host="microsoft.com" Port="21" User="billG" RemoteDir="" LocalDir="" Pass="02209478064088124084068083" Logontype="1" FWBypass="0" DontSavePass="0" ServerType="0" PasvMode="0" TimeZoneOffset="0" TimeZoneOffsetMinutes="0" Comments="" UTF8="0" DefaultSite="0"/>
Vielen Dank für Hilfe
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 113538
Url: https://administrator.de/forum/woerter-in-anfuehrungsstrichen-in-einer-zeile-einer-txt-in-einem-anderen-format-in-neue-txt-schreiben-113538.html
Ausgedruckt am: 15.04.2025 um 21:04 Uhr
6 Kommentare
Neuester Kommentar
Hallo gijukud6 und willkommen im Forum!
Gibt es in den Zeilen irgend eine Systematik (etwa: fixe Wortanzahl bzw Zeichenanzahl/Zeichenposition; oder: nur nach "Host", "Passwort" und "User" befindet sich ein ":")?
Es wäre auch hilfreich, wenn Du einige Beispielzeilen (mit anonymisierten Daten) in -Formatierung posten könntest ...
Grüße
bastla
Gibt es in den Zeilen irgend eine Systematik (etwa: fixe Wortanzahl bzw Zeichenanzahl/Zeichenposition; oder: nur nach "Host", "Passwort" und "User" befindet sich ein ":")?
Es wäre auch hilfreich, wenn Du einige Beispielzeilen (mit anonymisierten Daten) in -Formatierung posten könntest ...
Grüße
bastla
Folgendes Visual Basic Script solte dir helfen:
Nach deinen Formatvorgaben sucht das Script nach den folgenden Textstellen :
User=
Pass=
Host=
und extrahiert alles was danach zwischen den Anführungszeichen folgt.
Du musst nur noch den Pfad für die Textdatei in Zeile 2 des Codes anpassen.
Nach dem Aufruf findest du eine Textdatei im Ordner des Scriptes, du kannst den Pfad aber auch in Zeile 3 des Codes anpassen!
Wünsche weiterhin viel Erfolg !
Nach deinen Formatvorgaben sucht das Script nach den folgenden Textstellen :
User=
Pass=
Host=
und extrahiert alles was danach zwischen den Anführungszeichen folgt.
Du musst nur noch den Pfad für die Textdatei in Zeile 2 des Codes anpassen.
Nach dem Aufruf findest du eine Textdatei im Ordner des Scriptes, du kannst den Pfad aber auch in Zeile 3 des Codes anpassen!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Set fso = CreateObject("scripting.filesystemobject")
Set source_file = fso.OpenTextFile("text.txt",1)
Set target_textfile = fso.OpenTextFile("processed_file.txt",2,true)
Do Until source_file.AtEndOfStream
line = source_file.ReadLine
pos_content_user = InStr(1,line,"User=",1)+6
len_content_user = InStr(pos_content_user, line, Chr(34)) - pos_content_user
pos_content_pass = InStr(1,line,"Pass=",1)+6
len_content_pass = InStr(pos_content_pass, line, Chr(34)) - pos_content_pass
pos_content_host = InStr(1,line,"Host=",1)+6
len_content_host = InStr(pos_content_host, line, Chr(34)) - pos_content_host
user = Mid(line,pos_content_user, len_content_user)
pass = Mid(line,pos_content_pass, len_content_pass)
host = Mid(line,pos_content_host, len_content_host)
target_textfile.WriteLine "ftp://" & user & ":" & pass & "@" & host
Loop
MsgBox "Feddich..."
source_file.Close
target_textfile.Close
Wünsche weiterhin viel Erfolg !
Hallo gijukud6!
Ich hätte zwar auch eher VBS als Batch gewählt, aber es könnte - soferne es keine zusätzlichen Leerzeichen zwischendurch (etwa im Wert von "Site Name" oder "LocalDir") gäbe - so klappen:
Grüße
bastla
Ich hätte zwar auch eher VBS als Batch gewählt, aber es könnte - soferne es keine zusätzlichen Leerzeichen zwischendurch (etwa im Wert von "Site Name" oder "LocalDir") gäbe - so klappen:
1
2
3
4
5
6
2
3
4
5
6
@echo off & setlocal
set "Ein=D:\text.txt"
set "Aus=D:\processed_file.txt"
if exist "%Aus%" del "%Aus%"
for /f "usebackq tokens=3,5,8" %%i in ("%Ein%") do for /f "tokens=2,4,6 delims==" %%a in ("%%j=%%k=%%i") do >>"%Aus%" echo ftp://%%~a:%%~b@%%~c
bastla
Hallo gijukud6!
Gehe alle Zeilen der in der Klammer angegebenen Datei (da diese unter Anführungszeichen - für den Fall, dass Name oder Pfad Leerzeichen enthielten - steht muss, zur Unterscheidung von einem Text, "usebackq" verwendet werden) durch und entnehme die (durch die Default-Trennzeichen Leerzeichen bzw TAB) Teile 3, 5 und 8 als Variable %%i und alphabtisch folgende - Ergebnis für die erste Zeile:
Da die Werte jeweils durch ein "=" vom Namen getrennt sind, wird mit der nächsten "for /f"-Schleife anhand dieses Zeichens getrennt - der Einfachheit halber wird das Trennzeichen auch zwischen die einzelnen Namen-/Wert-Kombinationen (bereits in der benötigten Reihenfolge angegeben) gesetzt:
- zerlegt wird daher
Da nur die Werte interessieren, werden die "tokens" 2 ("stevey"), 4 ("01807254095081091089001004") und 6 ("apple.com") verwendet, um das gewünschte Ergebnis in die Ausgabedatei zu schreiben:
Die Schreibweise "%%~a" entfernt schließlich noch die umgebenden Anführungszeichen.
Wenn Du übrigens das "echo off" auf "echo on" änderst, erhältst Du die einzelnen Befehlszeilen (mit "aufgelösten" Variablen) vor der Ausführung angezeigt. Starten solltest Du den Batch (beim Testen ohnehin immer) dazu dirket von der Kommandozeile.
Grüße
bastla
for /f "usebackq tokens=3,5,8" %%i in ("%Ein%") do
%%i: Host="apple.com"
%%j: User="stevey"
%%k: Pass="01807254095081091089001004"
for /f "tokens=2,4,6 delims==" %%a in ("%%j=%%k=%%i") do
User="stevey"=Pass="01807254095081091089001004"=Host="apple.com"
>>"%Aus%" echo ftp://%%~a:%%~b@%%~c
Wenn Du übrigens das "echo off" auf "echo on" änderst, erhältst Du die einzelnen Befehlszeilen (mit "aufgelösten" Variablen) vor der Ausführung angezeigt. Starten solltest Du den Batch (beim Testen ohnehin immer) dazu dirket von der Kommandozeile.
Grüße
bastla