c0r32quad
Goto Top

Per Batch csv Datei Zeichen hinzufügen

Hallo zusammen,

ich benötige nochmal Hilfe bei .csv Dateien die per Batch bearbeitet werden sollen.

Folgende ausgangssituation:

In einem Ordner liegen mehrere .csv Dateien (meinchmal auch nur eine) welche umbenannt werden sollen und der Inhalt soll bearbeitet werden (es soll ein "F" hinzugefügt werden). Diese lasse ich dann unter Umständen auch noch zusammenfassen in eine einzelne .csv.

Hier mal eine Beispiel der Rohdatei (texte sind anonymisiert, da Kundendaten)
In den Texten sind auch "," oder "-" oder ":"vorhanden.
In diesem Beispiel gibt es nur die eine Zeile, es gibt aber auch Dateien mit mehreren zeilen
Trennzeichen ist ";"
Wie man sieht gibt es aber auch Spalten ohne Inhalt, bei denen dann mehrere ";" aufeinander folgen.

Text 1 mit Leerzeichen;Text 2 mit Leerzeichen;1234;123;1;;0;Text 3 mit Leerzeichen;Text 4 mit Leerzeichen;;;1;1234;123;;;000:000::;;Text 5 mit Leerzeichen;Text 6 mit Leerzeichen;5;Text 7 mit Leerzeichen;Text 8 mit Leerzeichen;Text 9 mit Leerzeichen;Text 10 mit Leerzeichen;Text 11 mit Leerzeichen;Text 12 mit Leerzeichen;;;;;123456789;;1,123456789,Text 13 mit Leerzeichen;TEXT;TEXT;TEXT;TEXT;Text 14 mit Leerzeichen;;Text 15 mit Leerzeichen;Text 16 mit Leerzeichen;;;;;;;;;;;;;;;;;;;;;;;;;;;X;X;;;Text 16 mit Leerzeichen

Umbenennen und / oder zusammenfassen klappt mittlerweile nach unzähligen Stunden bei google und auch hier im Forum.

Nun soll ans ende jeder Zeile ein ";F" angehangen werden. An dieser wahrscheinlich einfachen Sache hänge ich aber.
Ich habe schon herausgefunden, das ich keine Dateien direkt bearbeiten kann, sondern diese quasi ausgelesen werden und dann mit dem zusätzlichen Zeichen in eine neue Datei geschrieben werden müssen.

Das könnte man dann wahrscheinlich mit dem umbenennen kombinieren, also "Originaldatei.csv" wird zu "Präfix_Originaldatei.csv" inkl. "F"

Das zusammenfassen ist dann extra, da es nicht immer benötigt wird.

Ich muss es zwingend per Batch machen, da das Programm welche diese aufruft und die Daten dann weiterverarbeitet, nur Batch unterstützt.

Content-ID: 4128553404

Url: https://administrator.de/forum/per-batch-csv-datei-zeichen-hinzufuegen-4128553404.html

Ausgedruckt am: 19.03.2025 um 11:03 Uhr

4091525239
4091525239 02.10.2022 um 16:16:34 Uhr
Goto Top
@echo off &setlocal
set "ordner=d:\quelle"  
for %%a in ("%ordner%\*.csv") do (  
    >"prefix_%%~nxa" (for /f "usebackq delims=" %%b in ("%%a") do echo.%%b;F)  
)
thegeneral
thegeneral 02.10.2022 um 18:37:52 Uhr
Goto Top
Moin,
Alternativ mit PSPAD öffnen dann per Zahlenmanipulation ändern.
c0r32quad
c0r32quad 02.10.2022 aktualisiert um 19:36:41 Uhr
Goto Top
Hallo,

das haut super hin! Vielen Dank.

Ich habe das ganze in meine .bat gepackt und entsprechend Angepasst.

Ein Gedanke kam mir dabei noch:

Diese .csv Daten werden zu einer Maschine gesendet und Abgearbeitet.
Diese Maschine erlaubt aber nicht das senden von Identischen Dateinamen. Wenn also die Datei "X_Originaldatei.csv" (X=Präfix) schon einmal gesendet wurde, dann ein Teil aus dem Auftrag erneut gefertigt werden muss, wird die gleiche "Originaldatei.csv" Übertragen (nur mit weniger Inhalt) und mit dem Batch dann Umbenannt in "X_Originaldatei.csv"und das "F" hinzugefügt.
Kann man die Dateien die Erstellt wurden irgendwie Loggen und beim umbennen dann abfragen ob es diese Datei schon einmal gab?

Ich stelle mir so etwas vor:
dir /b /o:d "%IMPORT_PATH%\%FehlteilOrdner%\*.csv" >> "%IMPORT_PATH%\Log.txt"  

Diese Liste müsste dann aber vor dem Umbenennen abgefragt werden, und wenn der Name darin vorkommt, dann einen Zusätzlichen Präfix, also z.B. "XX_Originaldatei.csv" oder "XXX_Originaldatei.csv" usw.

Oder gibt es einen besseren weg?
Es werden ca. 10 - 20 Dateien pro Tag mit dem Batch bearbeitet.

@thegeneral Verstehe ich das richtig: Das ist ein Programm wie Notepad++?
c0r32quad
c0r32quad 05.10.2022 um 20:40:24 Uhr
Goto Top
Hallo nochmal,

ich habe mir das ganze nochmal angeschaut, es gibt eine Datei auf der Maschine, nach der man abfragen könnte.
Dann braucht man diese ganze log Datei nicht.

Ich müsste nur vergleichen, ob in dem einem Ordner die Datei (mit einer anderen Endung) liegt, wenn ja umbenennen, sonst nicht.

Sowas würde ich dann einfach vor der o.G for Schleife machen.

for %%a in ("%IMPORT_PATH%\*.csv") do (  
	if exist "%AbgleichOrdner%\%%~na" ren "%%a" "%Praefix2%%%a"  
)

Da habe ich aber einen Denkfehler, denn so werden alle Dateien im " %IMPORT_PATH% " umbenannt, wenn eine davon im " %AbgleichOrdner% " gefunden wird.

Kann mir dabei jemand helfen?