Per Batch bestimmte Zeilen einer Textdatei in eine 2. Textatei kopieren
Hallo !
Ich versuche schon eine Weile aus einer Textdatei mit sehr langen Datensätzen (ca. 840 Zeichen) bestimmte Zeilen in eine zweite Datei zu kopieren.
Es sollen nur die Zeilen in die 2. Datei geschrieben werden, die an Stelle 322 den Inhalt "02", "03" oder "91" haben. Alle anderen sollen ignoriert werden.
mein Ansatz:
@echo off
for /f %%i in (eingabedatei.txt) do (
set zeile=%%i
set vergl=%zeile:~321,2%
if "%Vergl%"=="91" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="02" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="03" echo %zeile%>>ausgabedatei.txt
)
Das funktioniert nicht.
In der Variable "Zeile" stehen nur die ersten 18 Zeichen der Datenzeile. (Die Textdatei enthält auch Leerzeichen innerhalb der Zeilen. Kann das damit zusammenhängen?)
In der Variable "Vergl" steht "~321,2" drin, statt der Inhalt. Das kann aber nichts mit der Textlänge zu tun haben. Zum Test habe ich es mit Postition 8 im Text versucht: Das selbe Problem.
Kann mir hier jemand weiterhelfen???? Ich habe schon die verschiedensten Foren erfolflos durchsucht.
Ich versuche schon eine Weile aus einer Textdatei mit sehr langen Datensätzen (ca. 840 Zeichen) bestimmte Zeilen in eine zweite Datei zu kopieren.
Es sollen nur die Zeilen in die 2. Datei geschrieben werden, die an Stelle 322 den Inhalt "02", "03" oder "91" haben. Alle anderen sollen ignoriert werden.
mein Ansatz:
@echo off
for /f %%i in (eingabedatei.txt) do (
set zeile=%%i
set vergl=%zeile:~321,2%
if "%Vergl%"=="91" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="02" echo %zeile%>>ausgabedatei.txt
if "%Vergl%"=="03" echo %zeile%>>ausgabedatei.txt
)
Das funktioniert nicht.
In der Variable "Zeile" stehen nur die ersten 18 Zeichen der Datenzeile. (Die Textdatei enthält auch Leerzeichen innerhalb der Zeilen. Kann das damit zusammenhängen?)
In der Variable "Vergl" steht "~321,2" drin, statt der Inhalt. Das kann aber nichts mit der Textlänge zu tun haben. Zum Test habe ich es mit Postition 8 im Text versucht: Das selbe Problem.
Kann mir hier jemand weiterhelfen???? Ich habe schon die verschiedensten Foren erfolflos durchsucht.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146519
Url: https://administrator.de/contentid/146519
Ausgedruckt am: 16.11.2024 um 17:11 Uhr
4 Kommentare
Neuester Kommentar
Moin Moni71,
Du musst nochmal kurz vor den kommenden Batches mit "SetLocal /?" am CMD-Prompt recherchieren.
Da erfährst du dann ausführlicher, dass
a) mit "SetLocal" alle im Batch verwendeten Variablen als "nur für diesen Batch sichtbar" angekündigt werden
b) mit "SetLocal EnableDelayedExpansion" eine "verzögerte Variablenauflösung" ermöglicht wird, die erlaubt, Variablen innerhalb einer CMD-Befehlszeile zu setzen und zu lesen.
Dein Schnipsel würde danach sinngemäß so aussehen:
Bei der 1.+2. "IF !vergl!" -Anweisung habe ich mal das "%%i" ECHOen lassen -> da ist keine Schreibweise mit "!" statt "%" möglich/nötig.
Bei allen statischen Variablen, die innerhalb von IF() oder FOR()-Anweisungsklammern gesetzt werden aber schon.
Grüße
Biber
Ich habe schon die verschiedensten Foren erfolflos durchsucht.
Wozu das denn? Batches dekliniert doch kein anderes Forum so durch wie wir... Du musst nochmal kurz vor den kommenden Batches mit "SetLocal /?" am CMD-Prompt recherchieren.
Da erfährst du dann ausführlicher, dass
a) mit "SetLocal" alle im Batch verwendeten Variablen als "nur für diesen Batch sichtbar" angekündigt werden
b) mit "SetLocal EnableDelayedExpansion" eine "verzögerte Variablenauflösung" ermöglicht wird, die erlaubt, Variablen innerhalb einer CMD-Befehlszeile zu setzen und zu lesen.
Dein Schnipsel würde danach sinngemäß so aussehen:
@echo off & SetLocal EnableDelayedExpansion
for /f %%i in (eingabedatei.txt) do (
set "zeile=%%i"
set "vergl=%zeile:~321,2%"
if "!Vergl!"=="91" echo %%i>>ausgabedatei.txt
if "!Vergl!"=="02" echo %%i>>ausgabedatei.txt
if "!Vergl!"=="03" echo !zeile!>>ausgabedatei.txt
)
Bei der 1.+2. "IF !vergl!" -Anweisung habe ich mal das "%%i" ECHOen lassen -> da ist keine Schreibweise mit "!" statt "%" möglich/nötig.
Bei allen statischen Variablen, die innerhalb von IF() oder FOR()-Anweisungsklammern gesetzt werden aber schon.
Grüße
Biber