Per BATCH einer .csv-Tabelle vorgegebene fortlaufende Nummern hinzufügen?
folgende Situation:
Ich habe eine .csv-Tabelle mit Artikelbezeichnungen, Preisen usw. Die erste Spalte hat die Überschrift "Artikelnummern" und ist ansonsten leer.
Dazu habe ich eine zweite .csv-Datei mit Artikelnummern.
Kann ich diese Artikelnummern per BATCH automatisch in die leere Artikelnummernspalte der ersten csv kopieren ohne den Rest der Tabelle dabei anzugreifen?
Also die Artikelnummern aus der zweiten csv sollen in die leere erste Spalte der ersten csv.
Wäre super, wenn da jemand einen Tipp hat.
Per Hand reinkopieren möchte ich gerade vermeiden weil ich das pro Tag mit etlichen csv-Tabellen machen müsste ;)
Lieben Gruß :)
2 Antworten
Ich gehe davon aus, dass beide CSV-Dateien Semikolon als Trennzeichen haben. Außerdem gehe ich davon aus, dass in der ersten Tabelle noch keine einzige Artikelnummer steht (abgesehen von der Überschrift). Es wird fortlaufend geschrieben, ohne eine Artikelnummer aus Tabelle 2 zu einer Artikelbezeichnung aus Tabelle 1 zu matchen.
@echo off
Setlocal EnableDelayedExpansion
set CounterA=1
set CounterZ=0
FOR /F "delims=;" %%A IN ('type "Tabelle 2.csv"') DO (
set /a CounterA+=1
set Artikel!CounterA!=%%A
)
FOR /F "tokens=1,* delims=;" %%A IN ('type "Tabelle 1.csv"') DO (
set /a CounterZ+=1
set Zeile!CounterZ!=%%A;%%B
)
echo !Zeile1!>NonExistentFile.csv
FOR /L %%A IN (2,1,!CounterA!) DO echo !Artikel%%A!;!Zeile%%A! >> NonExistentFile.csv
set /a CounterA+=1
FOR /L %%A IN (!CounterA!,1,!CounterZ!) DO echo ;!Zeile%%A! >> NonExistentFile.csv
ping localhost -n 2 >nul
move /Y "NonExistentFile.csv" "Tabelle 1.csv"
pause
exit /b
Nun zur Erklärung:
Die Datei liest alle Artikelnummern aus "Tabelle 2.csv" ein und speichert sie in fortlaufend nummerierten Variablen "Artikel2" bis "ArtikelX". Hat "Tabelle 2.csv" ebenfalls Überschriften, musst du in den ersten FOR-Befehl ein "skip=1 " vor "delims=;" einbauen.
Anschließend liest sie alle Zeilen aus "Tabelle 1.csv" ein und speichert sie in fortlaufend nummerierten Variablen "Zeile1" bis "ZeileY", wobei "Zeile1" die Überschrift ist.
Jetzt wird eine Datei namens "NonExistentFile.csv" erstellt, die am Ende "Tabelle 1.csv" überschreiben wird.
Jede Artikelnummer wird mit der Zeile mit derselben fortlaufenden Nummer in "NonExistentFile.csv" geschrieben, allerdings um 1 verschoben, damit die Überschrift bleibt. Gibt es mehr Zeilen als Artikelnummern, werden die restlichen Zeilen ohne Artikelnummer ans Ende der Datei gehängt. Gibt es mehr Artikelnummern als Zeilen, steht hinter den übrigen Artikelnummern nichts mehr. Sie werden aber alle übernommen.
Damit die Festplatte genug Zeit zum Schreiben hat, wird per PING eine Sekunde gewartet. Zu guter letzt wird die temporäre Datei "NonExistentFile.csv" auf "Tabelle 1.csv" verschoben.
Die Datei wurde erfolgreich getestet unter Windows 10 Home.
Ich habe gerade nochmal einwenig rumgetestet weil ich das insgesamt mit 9 csv-Tabellen machen muss (ich habe den Code einfach mehrmals untereinander kopiert und jeweils die Dateinamen angepasst) Das klappt wunderbar, danke nochmal :)
Jetzt habe ich aber noch Folgendes bemerkt:
- Bei einer der Tabellen muss die Artikelnummer in die 2., bei einer weiteren in die 4. Spalte eingetragen werden und nicht in der ersten.
- Bei 2 Tabellen wird ein Artikel jeweils mehrfach aufgeführt, also müsste die Artikelnummer jeweils n-mal wiederholt werden bis die nächste Nummer verwendet wird.
Gibt es da Möglichkeiten, dies umzusetzen?
Batch ist sehr primitiv, es handelt sich mehr oder weniger nur um eine Stapelverarbeitung. Ich bezweifle das es damit möglich ist. Versuch es doch mal mit VB.
Ja, mit VB würde mehr gehen aber da stecke ich zu wenig drin. Ich hatte gehofft, dass es vielleicht einen Befehl gibt, der das so umsetzt. Ein Großteil der Vorbereitung läuft schon per BATCH und dann hätte ich diesen Befehl nur hinzufügen müssen :)
Danke für deine Antwort :)