Batchverarbeitung suchen und ersetzen ohne Zusatztools
Hallo zusammen,
ich habe folgenden Problem: Ich verarbeite eine CSV-Datei und muss die letzte Zeile in der Datei um einen String erweitern, also quasi suchen und ersetzen. Das Batchskript fügt dann die Ausführungszeit an die Zeile an.
Beispiel:
Letze Zeile in der CSV-Datei (vorher): 2010-04-20;07:15:23;
Letze Zeile in der CSV-Datei (nachher): 2010-04-20;07:15:23;16:53:24;
Ich hoffe jemand kann mir bei dem Thema helfen, ich bin dankbar für jede Idee.
Gruß cqash
ich habe folgenden Problem: Ich verarbeite eine CSV-Datei und muss die letzte Zeile in der Datei um einen String erweitern, also quasi suchen und ersetzen. Das Batchskript fügt dann die Ausführungszeit an die Zeile an.
Beispiel:
Letze Zeile in der CSV-Datei (vorher): 2010-04-20;07:15:23;
Letze Zeile in der CSV-Datei (nachher): 2010-04-20;07:15:23;16:53:24;
Ich hoffe jemand kann mir bei dem Thema helfen, ich bin dankbar für jede Idee.
Gruß cqash
Please also mark the comments that contributed to the solution of the article
Content-Key: 141288
Url: https://administrator.de/contentid/141288
Printed on: May 4, 2024 at 09:05 o'clock
9 Comments
Latest comment
Hast du schon mal hier vorbeigeschaut:
Hallo cqash!
Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
Problem: Danach gibt's die Zeilenschaltung ...
Soferne VBScript nicht unter "nogo" fällt:
Grüße
bastla
Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
>>D:\Datei.csv 16:53:24;
Soferne VBScript nicht unter "nogo" fällt:
@echo off & setlocal
set "Datei=D:\Datei.csv"
set "Zusatz=16:53:24;"
set A=%temp%\AppendIt.vbs
>%A% echo Set fso=CreateObject("Scripting.FileSystemObject"):D=WScript.Arguments(0):T=fso.OpenTextFile(D).ReadAll:fso.CreateTextFile(D).Write T ^& WScript.Arguments(1)
cscript //nologo %A% "%Datei%" "%Zusatz%"
bastla
Hallo cqash!
Na gut - dann vielleicht so:
Voraussetzung: Die letzte Zeile kommt mit dem selben Inhalt nicht nochmals in der Datei vor ...
[Edit] Zeile 9 zum Aufräumen hinzugefügt [/Edit]
[Edit2] Jetzt so, wie's vorher schon gemeint war ... [/Edit2]
Grüße
bastla
Na gut - dann vielleicht so:
@echo off & setlocal
set "Datei=D:\Datei.csv"
set "Zusatz=16:53:24;"
for /f "usebackq delims=" %%i in ("%Datei%") do set "Letzte=%%i"
move "%Datei%" "%temp%\Datei.txt"
findstr /v /b "%Letzte%" "%temp%\Datei.txt">"%Datei%"
<nul >>"%Datei%" set /p=%Letzte%%Zusatz%
del "%temp%\Datei.txt"
[Edit] Zeile 9 zum Aufräumen hinzugefügt [/Edit]
[Edit2] Jetzt so, wie's vorher schon gemeint war ... [/Edit2]
Grüße
bastla
Zitat von @bastla:
Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
Problem: Danach gibt's die Zeilenschaltung ...
Wäre natürlich ganz einfach, wenn die letzte Zeile nicht mit einer Zeiilenschaltung endet:
>>D:\Datei.csv 16:53:24;
>
Das ließe sich ja verhindern:
<NUL >>D:\Datei.csvt set /P Dummy=15:53:24;
Gruß
LotPings
Hallo cqash!
Ersetze die Zeilen 20 bis 26 durch:
Grüße
bastla
P.S.: Vielleicht solltest Du überhaupt erst am Nachmittag testen ...
leider funktioniert es noch nicht ganz richtig
ist eine mäßig aussagekräftige Fehlerbeschreibung - da hilft der gepostete Code schon mehr ...Ersetze die Zeilen 20 bis 26 durch:
:end
for /f "usebackq delims=" %%i in ("%log_folder%%log_file%") do set "Letzte=%%i"
move "%log_folder%%log_file%" "%temp%\Datei.csv" >nul
findstr /v /b "%Letzte%" "%temp%\Datei.csv">"%log_folder%%log_file%"
>>"%log_folder%%log_file%" echo %Letzte%%stunde%:%minute%:%sekunde%;
del "%temp%\Datei.csv"
goto finish
bastla
P.S.: Vielleicht solltest Du überhaupt erst am Nachmittag testen ...