Verabeitung von txt-Dateien mittels Batch Verarbeitung
Hallo zusammen,
ich benötige Hilfe bei der Verarbeitung einer txt-Datei mittels Batch. Dabei geht es mir eigentlich nur um die Verarbeitung an sich. Es liegt folgende Ausgangssituation in Form der gegebenen txt-Datei vor:
Ziel ist es jetzt die Kommentare zu überspringen und die restlichen Zeilen in eine Datei zu schreiben, wobei allerdings die Information 01.06.12 aus der einen Kommentarzeile jeweils ans Ende der einzelnen Zeilen hängen.
Ich habe es erstmal so gemacht:
Das kam dabei heraus
Problem sind diese Meldungen am Anfang und am Ende und ich weiß nicht wie das Datum herausbekomme.
Arnie79
ich benötige Hilfe bei der Verarbeitung einer txt-Datei mittels Batch. Dabei geht es mir eigentlich nur um die Verarbeitung an sich. Es liegt folgende Ausgangssituation in Form der gegebenen txt-Datei vor:
& blabla
& blabla
& blabla - blabla
& blabla : blabla
& blabla
& blabla
& 01.06.12 00:00:00 - 01.07.12 00:00:00
& blabla
system1;8295860,0;1,54317897728E11;2088,504638671875;100,0;
system2;537980,0;1,5625690112E10;34119,76953125;100,0;
system3;8072,0;9,2398864E7;3749,3681640625;100,0;
system4;302408,0;7,40592384E9;3025,327880859375;100,0;
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;
& blabla
& blabla - blabla
& blabla : blabla
& blabla
& blabla
& 01.06.12 00:00:00 - 01.07.12 00:00:00
& blabla
system1;8295860,0;1,54317897728E11;2088,504638671875;100,0;
system2;537980,0;1,5625690112E10;34119,76953125;100,0;
system3;8072,0;9,2398864E7;3749,3681640625;100,0;
system4;302408,0;7,40592384E9;3025,327880859375;100,0;
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;
Ziel ist es jetzt die Kommentare zu überspringen und die restlichen Zeilen in eine Datei zu schreiben, wobei allerdings die Information 01.06.12 aus der einen Kommentarzeile jeweils ans Ende der einzelnen Zeilen hängen.
system4;302408,0;7,40592384E9;3025,327880859375;100,0;01.06.12
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12
Ich habe es erstmal so gemacht:
type nul >temp.txt
call :test_1
goto :eof
:test_1
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do (
if not %%j==& (
echo %%j >>temp.txt
)
)
goto :eof
exit
Das kam dabei heraus
ECHO ist eingeschaltet (ON).
system4;302408,0;7,40592384E9;3025,327880859375;100,0;01.06.12
...
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12
ECHO ist eingeschaltet (ON).
system4;302408,0;7,40592384E9;3025,327880859375;100,0;01.06.12
...
system5;73592,0;6,57774016E8;1318,2540283203125;100,0;01.06.12
ECHO ist eingeschaltet (ON).
Problem sind diese Meldungen am Anfang und am Ende und ich weiß nicht wie das Datum herausbekomme.
Arnie79
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189518
Url: https://administrator.de/forum/verabeitung-von-txt-dateien-mittels-batch-verarbeitung-189518.html
Ausgedruckt am: 17.04.2025 um 00:04 Uhr
15 Kommentare
Neuester Kommentar
Moin,
müsste das Script nicht so aussehen? Zeile 11 geändert. Du sagst ihm "goto eof" aber wo isn eof? denke das soll das am ende sein oder? damit er danach ein Exit macht.
Gruß zero
müsste das Script nicht so aussehen? Zeile 11 geändert. Du sagst ihm "goto eof" aber wo isn eof? denke das soll das am ende sein oder? damit er danach ein Exit macht.
type nul >temp.txt
call :test_1
goto :eof
:test_1
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do (
if not %%j==& (
echo %%j >>temp.txt
)
)
:eof
exit
Gruß zero
Hallöchen, ich vermute mal es hat was mit den leeren zeilen zu tun.. ;)
denn
bringt ja auch "ECHO ist eingeschaltet (ON)."
Und in der leeren zeile hast du ja nur einen Token dein %%i und kein %%j, also steht in der zeile 8 von dein Code:
Wenn du also dein code so änderst sollte dies funktionieren:
denn
echo >>C:\temp\temp.txt
bringt ja auch "ECHO ist eingeschaltet (ON)."
Und in der leeren zeile hast du ja nur einen Token dein %%i und kein %%j, also steht in der zeile 8 von dein Code:
echo >>temp.txt
Wenn du also dein code so änderst sollte dies funktionieren:
type nul >temp.txt
call :test_1
goto :eof
:test_1
for /f "tokens=1,2,3* delims=: " %%i in ('findstr /n $ 2012-06-01\test.txt') do (
if not %%j==& (
if not "%%j"=="" (
echo %%j >>temp.txt
)
)
)
goto :eof
exit
Tag Cold, wie Arnie schon gesagt hat das EOF heist End Of File, also er geht einfach ans ende der Datei.
wenn man also möchte das nach z.B einer if abfrage man zum ende will, einfach ein goto :eof
man spart sich also goto sprungmarke ...... und gaaaaannnnzzzzzz unten das :sprungmarke
"Mit EOF (End of File) wird das Ende einer Quelle signalisiert, welche in der Regel eine Datei oder ein Datenstrom ist."
Quelle:
http://de.wikipedia.org/wiki/End_of_File
€ wobei bei den ganzen das exit ziemlich sinnlos dort steht, da dieses ja nie erreicht wird.
wenn man also möchte das nach z.B einer if abfrage man zum ende will, einfach ein goto :eof
man spart sich also goto sprungmarke ...... und gaaaaannnnzzzzzz unten das :sprungmarke
"Mit EOF (End of File) wird das Ende einer Quelle signalisiert, welche in der Regel eine Datei oder ein Datenstrom ist."
Quelle:
http://de.wikipedia.org/wiki/End_of_File
€ wobei bei den ganzen das exit ziemlich sinnlos dort steht, da dieses ja nie erreicht wird.
Hallo ColdZero89!
... ansonsten wäre "
Grüße
bastla
Ich denke das - aus der-bobs code - goto :eof aus Zeile 13 muss zu einem einfachen :eof gemacht werden ^^
Wenn sicher ist, dass nach dem Unterprogramm ":test_1" keine weiteren Zeilen hinzugefügt werden, sind sowohl Zeile 14 (die immer) als auch Zeile 13 unnötig ...... ansonsten wäre "
goto :eof
" am besten mit "Beende Block" zu übersetzen - in Zeile 3 ist damit der Batch ("Hauptprogramm") gemeint, daher wird tatsächlich der Batch beendet; in Zeile 13 wird dadurch das Ende des Unterprogramms signalilsiert (entspräche einem "Return
" in Ur-Basic, oder einem "End Sub
") - falls erforderlich, könnte so zB ab Zeile 14 ein weiteres Unterprogramm hinzugefügt werden ...Grüße
bastla
... wobei es eigentlich (fast) ganz ohne "
genügen ... 
Grüße
bastla
goto :eof
" ginge, da zumindest ein Unterprogramm ja gar nicht nötig ist - wenn insbesondere auch keine Leerzeilen im Ergebnis aufscheinen sollen, dürfte ja schon@echo off & setlocal
set "Ein=2012-06-01test.txt"
set "Aus=Ergebnis.txt"
set "Datum="
for /f "tokens=2" %%i in ('findstr /brc:"& [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9] " "%Ein%"') do set "Datum=%%i"
if not defined Datum echo Datum nicht gefunden! & goto :eof
del "%Aus%" 2>nul
for /f "delims=" %%i in ('findstr /vb "&" "%Ein%"') do >>"%Aus%" echo %%i%Datum%
Grüße
bastla
Hallo Arnie79!
Was hier fehlt, ist "
Grüße
bastla
Was hier fehlt, ist "
delayedExpansion
" (Erklärungen dazu findest Du in diversen Threads und natürlich im Tutorial zur FOR-Schleife):@echo off & setlocal enabledelayedexpansion
set "Aus=temp.txt"
del "%Aus%" 2>nul
for /R .\2012-06-01 %%a in (*monthly*.txt) do (
set "Datum="
for /f "tokens=2" %%i in ('findstr /brc:"& [0-9][0-9]\.[0-9][0-9]\.[0-9][0-9]" "%%a"') do set "Datum=%%i"
if not defined Datum echo Datum nicht gefunden! & goto :eof
for /f "delims=" %%i in ('findstr /vb "&" "%%a"') do >>"%Aus%" echo %%i!Datum!
)
bastla