BATCH: Zeile mit Trennzeichen zerlegen
Hallo zusammen,
ich bräuchte mal Hilfe und hoffe hier kann mir jemand helfen.
Ich habe eine Textdatei (liste.txt) wo in der Form IP Endungen drin stehen, die mit einem Trennzeichen Semikolon getrennt sind.
Inhalt z. B. 10;11;23;25;30 oder 10;11;23;25;30;124;125
Die Datei kann verschiedene Anzahlen an IP Endungen haben.
Diese Endungen muss per Batch rausfiltern um sie weiterzuverarbeiten. Irgendwie fehlt mir hier ein Gedanke.
Ich würde Sie gerne in eine neue Datei untereinander schreiben lassen (z.b. liste_clean.txt) die dann so aussieht
10
11
23
25
30
Ich habe dies irgendwie schon versucht per for Schleife und token & delims. Aber entweder bekomme ich nur einen einen Wert hineingeschrieben oder wieder die ganze Zeile
hat aber alles nicht funktioniert 
Sicherlich ganz einfach, aber irgendwie bekomme ich es nicht hin, die Zeichenkette zu zerlegen mit definiertem Trennzeichen. Das Trennzeichen könnte ich auch austauschen, wenn Semikolon ein Problem ergibt.
Die Suche hat mir irgendwie nicht geholfen - genauso wie die große Suchmaschine.
Hat jemand eine Idee?
Vielen Dank im Voraus!
ich bräuchte mal Hilfe und hoffe hier kann mir jemand helfen.
Ich habe eine Textdatei (liste.txt) wo in der Form IP Endungen drin stehen, die mit einem Trennzeichen Semikolon getrennt sind.
Inhalt z. B. 10;11;23;25;30 oder 10;11;23;25;30;124;125
Die Datei kann verschiedene Anzahlen an IP Endungen haben.
Diese Endungen muss per Batch rausfiltern um sie weiterzuverarbeiten. Irgendwie fehlt mir hier ein Gedanke.
Ich würde Sie gerne in eine neue Datei untereinander schreiben lassen (z.b. liste_clean.txt) die dann so aussieht
10
11
23
25
30
Ich habe dies irgendwie schon versucht per for Schleife und token & delims. Aber entweder bekomme ich nur einen einen Wert hineingeschrieben oder wieder die ganze Zeile
for /f "token=* delims=;" in (liste.txt) do....
Sicherlich ganz einfach, aber irgendwie bekomme ich es nicht hin, die Zeichenkette zu zerlegen mit definiertem Trennzeichen. Das Trennzeichen könnte ich auch austauschen, wenn Semikolon ein Problem ergibt.
Die Suche hat mir irgendwie nicht geholfen - genauso wie die große Suchmaschine.
Hat jemand eine Idee?
Vielen Dank im Voraus!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666412
Url: https://administrator.de/forum/batch-zeile-mit-trennzeichen-zerlegen-666412.html
Ausgedruckt am: 11.04.2025 um 12:04 Uhr
7 Kommentare
Neuester Kommentar
Moin,
wieso nicht gleich mit Powershell?
Deine Zeile wird an den Trennzeichen, die du mittels Delims festgelegt hast gesplittet. Mit Tokens legst du fest, welcher gesplittete Teil der Zeichenkette in welche Schleifenvariablen geschrieben wird.
"Tokens=*" bedeutet hier soviel wie "Schreibe alles restliche ungesplittet in die nächste folgende Variable", somit erhälst du natürlich wieder die Ganze Zeile.
Gruß Thomas
wieso nicht gleich mit Powershell?
Zitat von @Benni82:
Ich habe dies irgendwie schon versucht per for Schleife und token & delims. Aber entweder bekomme ich nur einen einen Wert hineingeschrieben oder wieder die ganze Zeile
hat aber alles nicht funktioniert 
Zum einen fehlt bei deinem Schnipsel die Schleifenvariable, darüber hinaus scheinst du das mit den Tokens nicht richtig verstanden zu haben.Ich habe dies irgendwie schon versucht per for Schleife und token & delims. Aber entweder bekomme ich nur einen einen Wert hineingeschrieben oder wieder die ganze Zeile
for /f "token=* delims=;" in (liste.txt) do....
Deine Zeile wird an den Trennzeichen, die du mittels Delims festgelegt hast gesplittet. Mit Tokens legst du fest, welcher gesplittete Teil der Zeichenkette in welche Schleifenvariablen geschrieben wird.
"Tokens=*" bedeutet hier soviel wie "Schreibe alles restliche ungesplittet in die nächste folgende Variable", somit erhälst du natürlich wieder die Ganze Zeile.
for /f "Tokens=1-5 Delims=;" %%A in (liste.txt) do (
echo Token 1 = %%A
echo Token 2 = %%B
echo Token 3 = %%C
echo Token 4 = %%D
echo Token 5 = %%E
)
Gruß Thomas
@echo off
setlocal enableextensions
set /p inText=<liste.txt
call :iterate inText
pause
goto :eof
:iterate:
setlocal enableextensions enabledelayedexpansion
for /f "tokens=1,* delims=;" %%a in ("!%1!") do set "%1=%%b" & call :dowork %%a
if "!%1!" neq "" goto :iterate:
goto :eof
:dowork
echo Working at %1
Wi - der - lich ;)
Zitat von @Benni82:
Powershell kann ich hier leider nicht nehmen. Es handelt sich hier um bestehende XP Systeme (Ja, wirklich!) wo nichts installiert werden kann, sorry
Powershell kann ich hier leider nicht nehmen. Es handelt sich hier um bestehende XP Systeme (Ja, wirklich!) wo nichts installiert werden kann, sorry
Oha! XP? Dein Ernst? Ich hoffe du gehst damit nicht ans Netz.
Wenn kein Powershell dann verwende wenigsten VBScript. Der Scripting Host ist hier per default aktiviert.
Beispiele gibt's Tonnenweise im Netz. Und zum Testen tut auch die Free-Versuon von VBSEdit. Da sind massig an Codesnipeds dabei.
Call einen VBS von der CMD aus dann so:
Cscript "Pfad zur VBS"
Grüße!
Zitat von @Benni82:
Es können aber immer unterschiedliche Anzahlen sein. Oder sehe ich das falsch? Also mal stehen 5 in der Datei und mal auch 10
Ist ja kein Problem, du musst nur die Tokens entsprechend erhöhen etwa auf 1-10. Wenn dann in einer Zeile nur 5 stehen, sind die restlichen Variablen leer.Es können aber immer unterschiedliche Anzahlen sein. Oder sehe ich das falsch? Also mal stehen 5 in der Datei und mal auch 10