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-Key: 4128553404

Url: https://administrator.de/contentid/4128553404

Printed on: April 19, 2024 at 02:04 o'clock

Mitglied: 4091525239
4091525239 Oct 02, 2022 at 14:16:34 (UTC)
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)  
)
Member: thegeneral
thegeneral Oct 02, 2022 at 16:37:52 (UTC)
Goto Top
Moin,
Alternativ mit PSPAD öffnen dann per Zahlenmanipulation ändern.
Member: c0r32quad
c0r32quad Oct 02, 2022 updated at 17:36:41 (UTC)
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++?
Member: c0r32quad
c0r32quad Oct 05, 2022 at 18:40:24 (UTC)
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?