Per BATCH einer .csv-Tabelle vorgegebene fortlaufende Nummern hinzufügen?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.

30

Perfekt, genau das habe ich gesucht, danke :)

0
30

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?

0

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.

30

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 :)

0

Wie finde ich leere Verzeichnisse per Batch-Befehl?

Hallo, ich bin auf der Suche nach einer Batch-Datei mit der ich leere Verzeichnisse finden kann. Die Idee ist, dass ich in der Datei ein bestimmtes Verzeichniss angebe in dem viele Unterverzeichnisse vorhanden sind und der Batch nach dem durchlaufen dann ein Dokument raus gibt, in dem steht welche Unterverzeichnisse leer sind und wo diese sind. Wichtig ist das er diese nicht löscht, dazu findet man ja hunderte Lösungen. Ich habe schon einen Batch zum löschen, der mir später sagt an welcher Stelle die leeren gelöschten Verzeichnisse lagen, aber das ist ja nicht das was ich möchte.

@echo off set gotodir="xyz"
FOR /F "tokens=* delims=" %%i in ('dir /AD /B /S %gotodir% ^| sort /R' ) do (RD "%%i" 2>nul && echo DELETE %%i) >>text.txt

Wie muss ich ihn verändern, dass er das macht was ich möchte?

...zur Frage

Was möchtest Du wissen?