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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141288
Url: https://administrator.de/contentid/141288
Ausgedruckt am: 19.11.2024 um 07:11 Uhr
9 Kommentare
Neuester Kommentar
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 ...