Per Batch, 1.Lösung, alle Zeilenumbrüche aus einer TXT-Datei entfernen oder alternativ geziehlte Textblöcke aus einer TXT-Datei in eine zweite kopieren
Hallo, habe schon viele tolle Anregungen in diesem Forum gefunden, und hoffe ein Batch-Spezi findet sich und kann mein Problem lösen.
Ausgangsproblem ist, aus einer Text-Datei definierte Abschnitte in separate Text-Dateien zu kopieren. Die Ausgangsdatei hat folgendes Aussehen:
\\Berlin\Hauptstr8\Hotel_zum_Löwen
Hans.Meier keine Telefon
Werner.Meier kein Telefon
\\Berlin\Bahnhofstr11\Hotel An der Bahn
Ute.Wagner handy
\\Bonn\Uferstr888\Hotel zum Sonderzeichen$
Bernd.Richter isdn-telefon
In einer Steuerdatei habe ich alle Hotelnamen, welche per FOR-schleife ausgelesen werden. Für die jeweiligen Anschriften sollen nun in separaten TXT-Dateien, die Bewohnernamen
mit den Telefonangaben aus der Ausgangsdatei kopiert werden.
Mein erster Gedanke war, das mit FINDSTR und RegEx suche zu machen, aber das geht leider nur Zeilenweise und dazu müsste die ganze Ausgangsdatei in einer Zeile vorliegen.
Denn die \\ und der Hotelname sind immer vorhanden. Zwischen zwei mal vorkommenden \\ als zeilenanfang, hätte ich den Block den ich dann noch von den unwichtigen
Inhalten, wie Ort\Straße und Hotelname befreien könnte.
Falls es die Lösung vereinfacht, so kann ich auch vor jeder Anschriftenzeile eine Leerzeile einfügen.
Also erste Frage, wie bekomme ich alle Zeilenumbrüche aus der Ausgangsdatei haraus?
Wenn jemand eine andere Lösung, zum gezielten rauskopieren der Namenszeilen hat währe das auch nicht schlecht und als Alternative willkommen.
In den Zieldateien sollte dann folgendes stehen:
1.Datei soll heißen: Hotel_zum_Löwen.txt und beinhalten:
Hans.Meier keine Telefon
Werner.Meier kein Telefon
2.Datei soll heißen: Hotel an der Bahn.txt und beinhalten:
Ute.Wagner handy
usw.
Ausgangsproblem ist, aus einer Text-Datei definierte Abschnitte in separate Text-Dateien zu kopieren. Die Ausgangsdatei hat folgendes Aussehen:
\\Berlin\Hauptstr8\Hotel_zum_Löwen
Hans.Meier keine Telefon
Werner.Meier kein Telefon
\\Berlin\Bahnhofstr11\Hotel An der Bahn
Ute.Wagner handy
\\Bonn\Uferstr888\Hotel zum Sonderzeichen$
Bernd.Richter isdn-telefon
In einer Steuerdatei habe ich alle Hotelnamen, welche per FOR-schleife ausgelesen werden. Für die jeweiligen Anschriften sollen nun in separaten TXT-Dateien, die Bewohnernamen
mit den Telefonangaben aus der Ausgangsdatei kopiert werden.
Mein erster Gedanke war, das mit FINDSTR und RegEx suche zu machen, aber das geht leider nur Zeilenweise und dazu müsste die ganze Ausgangsdatei in einer Zeile vorliegen.
Denn die \\ und der Hotelname sind immer vorhanden. Zwischen zwei mal vorkommenden \\ als zeilenanfang, hätte ich den Block den ich dann noch von den unwichtigen
Inhalten, wie Ort\Straße und Hotelname befreien könnte.
Falls es die Lösung vereinfacht, so kann ich auch vor jeder Anschriftenzeile eine Leerzeile einfügen.
Also erste Frage, wie bekomme ich alle Zeilenumbrüche aus der Ausgangsdatei haraus?
Wenn jemand eine andere Lösung, zum gezielten rauskopieren der Namenszeilen hat währe das auch nicht schlecht und als Alternative willkommen.
In den Zieldateien sollte dann folgendes stehen:
1.Datei soll heißen: Hotel_zum_Löwen.txt und beinhalten:
Hans.Meier keine Telefon
Werner.Meier kein Telefon
2.Datei soll heißen: Hotel an der Bahn.txt und beinhalten:
Ute.Wagner handy
usw.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134145
Url: https://administrator.de/forum/per-batch-1-loesung-alle-zeilenumbrueche-aus-einer-txt-datei-entfernen-oder-alternativ-geziehlte-textbloecke-134145.html
Ausgedruckt am: 22.04.2025 um 02:04 Uhr
6 Kommentare
Neuester Kommentar

Hallo Willi,
deine Aufgabenstellung ist zwar nicht ganz eindeutig aber versuch es mal hiermit:
Nur Teilweise getestet.
Gruß
LotPings
deine Aufgabenstellung ist zwar nicht ganz eindeutig aber versuch es mal hiermit:
@Echo off&Setlocal
set Ausgangsdatei=.\Hotels.txt
if defined Hotel set "Hotel="
For /f "delims=" %%A in (%Ausgangsdatei%) do Call :check "%%~A"
Pause
Goto :eof
:Check
Set Line=%~1
if "%Line:~0,2%" EQU "\\" set "Hotel=%Line:~2%"&goto :NewHotel
if defined Hotel Echo/%~11>>"%Hotel%.txt"
goto :Eof
:NewHotel
If "%Hotel%" NEQ "%Hotel:*\=%" Set "Hotel=%Hotel:*\=%"&Goto :NewHotel
Echo Neues Hotel=%Hotel%
:: hier noch mögliche Sonderzeichen aus Dateinamen entfernen/maskieren
:: z.Bsp. Doppelpunkt gegen Unterstrich
Set "Hotel=%Hotel::=_%"
Goto :eof
Nur Teilweise getestet.
Gruß
LotPings

Hallo Willi,
der String "Hotel" wird auch gar nicht gesucht.
Bei Zeilen welche mit "\\" beginnen wird der Abschnitt hinter dem letzten "\"Als Hotelname verwendet und in der Variablen "Hotel" gespeichert und solange als Dateiname verwendet bis er durch einen neuen Inhalt ersetzt wird.
Gruß
LotPings
der String "Hotel" wird auch gar nicht gesucht.
Bei Zeilen welche mit "\\" beginnen wird der Abschnitt hinter dem letzten "\"Als Hotelname verwendet und in der Variablen "Hotel" gespeichert und solange als Dateiname verwendet bis er durch einen neuen Inhalt ersetzt wird.
Gruß
LotPings
also ganz eindeutig ist mir deine Frage nicht aber, wenn wir mal gaaanz langsam herangehen moechtest
du deine Ausgangsdatei "splitten". Weil Zeilenumbrueche sind ehr "vbCrLf".
Aber das alles in VBS zum Beispiel!
Also, wenn du nur "unterteilen" moechtest, dann google mal nach der SPLIT-Funktion in VBS oder so.
Ich meine, dass dich das ehr deinem Ziel naeher bringt.
Beispiel ind VBS fuer SPLIT and JOIN
Gruss
Tsuki
du deine Ausgangsdatei "splitten". Weil Zeilenumbrueche sind ehr "vbCrLf".
Aber das alles in VBS zum Beispiel!
Also, wenn du nur "unterteilen" moechtest, dann google mal nach der SPLIT-Funktion in VBS oder so.
Ich meine, dass dich das ehr deinem Ziel naeher bringt.
Beispiel ind VBS fuer SPLIT and JOIN
Dim b()
Dim Delim
T = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z"
WScript.Echo "OriginalText: " & T
Delim = "," 'ganzen String nach Kommas durchsuchen und bei jedem Komma splitten
a = Split(T, Delim)
ReDim b(UBound(a)) 'Alle "Einzelstücke" in ein Array (ohne Kommas!) einlesen
For i = 0 To UBound(a)
b(i) = a(i)
Next
Delim = "." 'Punkt zwischen die einzelnen Arrays einfügen und Ausgabe in GROSSBUCHSTABEN
c = UCase(Join(b, Delim))
WScript.Echo "Mit Punkt und gross: " & c
Delim = ";" 'Semikolon zwischen die einzelnen Arrays einfügen und Ausgabe in kleinbuchstaben
c = LCase(Join(b, Delim))
Wscript.Echo "Mit Semikolon und klein: " & c
msgbox ""
Gruss
Tsuki