TXT-Dateien mit Batch verarbeiten
Hallo zusammen,
ich benötige Hilfe bei der Verarbeitung mehrerer TXT-Dateien mittels Batch. Ich habe mehrere Textdateien a.txt, b.txt usw., die wie folgt aufgebaut sind:
Datum:;01.01.2012
Quelle:;Standort
Zeit;;;SpalteA;SpalteB;SpalteC;SpalteD;SpalteE;SpalteF;SpalteG;SpalteH
Gesamt;;0;0;0;0;0;0;0;0;0
7:15;-;7:30;0;0;0;0;0;0;0;0;0
7:30;-;7:45;0;0;0;0;0;0;0;0;0
Die wichtigen Zeilen beginnen für mich ab Zeile 4, da sich dort die eigentlichen Daten befinden. Mit dem folgenden Batch Code nehme ich, alle
Dateien und schreibe jeweils alle Zeilen außer die ersten 4 in die Datei total.txt mit der Ergänzung, dass ich die Quelle noch als zusätzliche Spalten anhänge.
Das klappt auch alles ganz gut. Was ich aber einfach nicht hinbekomme ist es, von jeder Datei das Datum aus der ersten Zeile in eine Variable zu schreiben
und dann ebenfalls als zusätzliche Spalte in die Zieldatei zu schreiben.
Hier meine Versuch, der nicht funktioniert:
Ich hoffe, dass der Beitrag ok so ist. Ich habe auch bereits gesucht, und vieles ausprobiert, es aber nicht hinbekommen, weshalb ich also einen neuen Beitrag verfasst habe.
Gruß Arne
ich benötige Hilfe bei der Verarbeitung mehrerer TXT-Dateien mittels Batch. Ich habe mehrere Textdateien a.txt, b.txt usw., die wie folgt aufgebaut sind:
Datum:;01.01.2012
Quelle:;Standort
Zeit;;;SpalteA;SpalteB;SpalteC;SpalteD;SpalteE;SpalteF;SpalteG;SpalteH
Gesamt;;0;0;0;0;0;0;0;0;0
7:15;-;7:30;0;0;0;0;0;0;0;0;0
7:30;-;7:45;0;0;0;0;0;0;0;0;0
Die wichtigen Zeilen beginnen für mich ab Zeile 4, da sich dort die eigentlichen Daten befinden. Mit dem folgenden Batch Code nehme ich, alle
Dateien und schreibe jeweils alle Zeilen außer die ersten 4 in die Datei total.txt mit der Ergänzung, dass ich die Quelle noch als zusätzliche Spalten anhänge.
Das klappt auch alles ganz gut. Was ich aber einfach nicht hinbekomme ist es, von jeder Datei das Datum aus der ersten Zeile in eine Variable zu schreiben
und dann ebenfalls als zusätzliche Spalte in die Zieldatei zu schreiben.
set "source=C:\"
set var="";
type nul > temp.txt
type nul > total.txt
for /D %%a in (a.txt, b.txt, c.txt, d.txt) do
(
set "filename=%%a"
copy /Y "%source%%%a" temp.txt
call :delLines
)
goto :eof
:delLines
for /f "tokens=1* delims=:" %%i in ('findstr /n $ temp.txt') do
(
if %%i gtr 4
(
echo %%j;%filename:~0,-4% >> total.txt
)
)
goto :eof
exit
Hier meine Versuch, der nicht funktioniert:
:delLines
for /f "tokens=1,* delims=:" %%i in ('findstr /n $ temp.txt') do
(
if %%i lss 2
(
set var=%%j
)
if %%i gtr 4
(
echo %%j;%filename:~0,-4%%var:~6% >> total.txt
)
)
Ich hoffe, dass der Beitrag ok so ist. Ich habe auch bereits gesucht, und vieles ausprobiert, es aber nicht hinbekommen, weshalb ich also einen neuen Beitrag verfasst habe.
Gruß Arne
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 178662
Url: https://administrator.de/forum/txt-dateien-mit-batch-verarbeiten-178662.html
Ausgedruckt am: 12.05.2025 um 18:05 Uhr
7 Kommentare
Neuester Kommentar
Hallo Arnie79!
Du könntest im einfachsten Fall das Datum (inkl Semikolon davor) so ausgeben:
Um übrigens Zeilen zu überspringen gibt es
Außerdem ist in Zeile 5 die Option "
Schließlich kannst Du noch das "
Einen hab ich noch: Wenn Du nur den Dateinamen (ohne Typ) haben möchtest, kannst Du entweder in der Schleife anstelle von "a.txt" nur "a" verwenden und dann eben das ".txt" in Zeile 8 hinzufügen oder die Zeile 7 auf
ändern bzw den Dateinamen beim Aufuf des Unterprogramms als Parameter übergeben und die Variable %filename% ganz einsparen:
Grüße
bastla
Du könntest im einfachsten Fall das Datum (inkl Semikolon davor) so ausgeben:
set /p "Zeile1=<temp.txt"
echo %Zeile1:~6%
for /f "skip=3 ..."
/D
" genauso unnötig, wie "/Y
" in Zeile 8 ...Schließlich kannst Du noch das "
exit
" einsparen oder durch ein "goto :eof
" ersetzen.Einen hab ich noch: Wenn Du nur den Dateinamen (ohne Typ) haben möchtest, kannst Du entweder in der Schleife anstelle von "a.txt" nur "a" verwenden und dann eben das ".txt" in Zeile 8 hinzufügen oder die Zeile 7 auf
set "filename=%%~na"
...
call :delLines "%%~na"
...
echo %%j;%~1%Zeile1:~6%
bastla
Hallo Arne,
es wäre hilfreich gewesen, wenn Du kurz geschrieben hättest, was genau bei Deinem Versuch nicht funktioniert. und welche Ausgabe Du bekommst.
Suche mal nach "setlocal EnableDelayedExpansion", denn die in der for-Schleife gesetzte Variable "var" ist sonst erst nach dem beenden der for-Schleife mit dem neuen Inhalt verwendbar.
Du könntest "var" am Anfang mal auf "irgendwas" setzten um zu sehen was ich meine.
Dannach könntest Du das script mit
beginnen und die Ausgabe auf
ändern.
Das sollte Dich erst mal weiter bringen.
Gruß icsAT
es wäre hilfreich gewesen, wenn Du kurz geschrieben hättest, was genau bei Deinem Versuch nicht funktioniert. und welche Ausgabe Du bekommst.
Suche mal nach "setlocal EnableDelayedExpansion", denn die in der for-Schleife gesetzte Variable "var" ist sonst erst nach dem beenden der for-Schleife mit dem neuen Inhalt verwendbar.
Du könntest "var" am Anfang mal auf "irgendwas" setzten um zu sehen was ich meine.
Dannach könntest Du das script mit
setlocal EnableDelayedExpansion
echo %%j;%filename:~0,-4%!var! >> total.txt
Das sollte Dich erst mal weiter bringen.
Gruß icsAT
@icsat
Nur als Anmerkung: Da die Ausgabe der Variablen %filename% erst im Unterprogramm (und damit einer neuen CMD-Instanz) erfolgt, ist "delayedExpansion" nicht erforderlich (aber, wie oben schon erwähnt: das trifft auch auf die Variable selbst zu ) ...
Grüße
bastla
Nur als Anmerkung: Da die Ausgabe der Variablen %filename% erst im Unterprogramm (und damit einer neuen CMD-Instanz) erfolgt, ist "delayedExpansion" nicht erforderlich (aber, wie oben schon erwähnt: das trifft auch auf die Variable selbst zu ) ...
Grüße
bastla
Hey bastla,
Grundsätzlich ist Deine Aussage bezüglich der Variablen "filename" richtig, ich habe jedoch von "var" und nicht von "filename" gesprochen, oder?
Natürlich ist Deine Variante schicker, ich wollte nur schnell auf einen mögliches Problem im Skript des TE hinweisen ohne einen völlig neuen Ansatz zu verfolgen. Ich Hatte Deinen Post vor meinem auch nicht gesehen, sonst hätte ich vermutlich gar nicht geantwortet, weil Du Dir ja schon die Mühe gemacht hast diverse Schwächen des Skriptes aufzuzeigen und entsprechende Verbesserungsvorschläge zu posten.
In diesem Sinne einen schönen Tag noch
icsAT
Grundsätzlich ist Deine Aussage bezüglich der Variablen "filename" richtig, ich habe jedoch von "var" und nicht von "filename" gesprochen, oder?
Natürlich ist Deine Variante schicker, ich wollte nur schnell auf einen mögliches Problem im Skript des TE hinweisen ohne einen völlig neuen Ansatz zu verfolgen. Ich Hatte Deinen Post vor meinem auch nicht gesehen, sonst hätte ich vermutlich gar nicht geantwortet, weil Du Dir ja schon die Mühe gemacht hast diverse Schwächen des Skriptes aufzuzeigen und entsprechende Verbesserungsvorschläge zu posten.
In diesem Sinne einen schönen Tag noch
icsAT