Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

CSV-Datei mit Batch auslesen

Empfohlene Antworten

Veröffentlicht

Ich habe jetzt folgendes Problem, ich bekomme mehrere CSV-Dateien geliefert (Namesgebung immer gleich: Dienstzeiten_XXXX_YY.csv). XXXX steht für eine vierstellige Zahl und YY ist der Monat.

Ich soll jetzt mit Hilfe einer Batchdatei alles CSV-Dateien aus einem Monat nehmen auslesen und in eine (neue) gemeinsame CSV-Datei schreiben (CSV immer anhängen).

Ich muss aber leider gestehen, ich hab noch nie in meinem Leben ne Batchdatei geschrieben.

Wie macht man sowas? Welche Programmiersprache nimmt man da? Ich hab echt keine Ahnung.

Könnt ihr mir denn vielleicht weiter helfen?

Danke schonmal!

Wenn du eine Batch-Datei schreiben sollst, gehe ich jetzt mal davon aus, dass dies unter Windows geschehen soll? Welches Windows? NT, XP, 98, 2000??? Da unterscheiden sich die Batch-Befehle nämlich teilweise erheblich.

Eine Batchdatei schreibst du, indem du einfach einen Editor (edit oder Notepad) öffnest und eine Datei anlegst, die die Endung .bat hat. Du führst diese unter Windows einfach durch Doppelklick aus.

Nun ist es aber wichtig, welches Windows du einsetzt, da sich die benötigten Befehle (z.B. for) unterscheiden.

Die Vorgehensweise sollte ungefähr so sein, dass du mit "for" einen Dateiensatz durchgehst und jeweils "Zieldatei.csv = Zieldatei.csv + AktuelleDatei.csv" machst.

Also Betriebssystem ist Windows NT 4.0 SP6 und so in die Richtung mit for hätte ich auch gedacht.

Wenn ich alle CSV-Datein durch bin soll die abgearbeiteten dann in einen Ordner Sicherung schieben! Ich hab gestern in der Hilfe gelesen, dass man das mit MOVE machen kann, lieg ich da richtig?

Danke!!

Ja, mit move kannst du die Dateien ins Verzeichnis bewegen!

Und zu der Sache mit for:

Probiere mal folgende Batch-Datei (z.B. Concat.bat): Du musst ihr den Monat als Parameter übergeben! z.B. Aufruf: "concat 12" für den Monat Dezember.


@echo off


copy nul Monat%1.csv


for %%f in ( Dienstzeiten_????_%1.csv ) do copy Monat%1.csv + %%f Monat%1.csv /B


move .\Dienstzeiten_????_%1.csv .\Sicherung\


Damit sollte das alles klappen!

Ich habe es unter XP getestet. Sollte aber auch unter NT gehen!

Hm, vielleicht noch ein paar Kommentare, wenn du das noch nie gemacht hast:


@echo off

Unterdrückt das Wiederholen der auszuführenden Befehle. Es werden also nur die Ergebnisse angezeigt

copy nul Monat%1.csv

Legt die Datei Monat12.csv an (12, da du in meinem Beispiel 12 als Parameter beim Aufruf übergibst. (%1 steht für den ersten übergebenen Parameter... %2, %3 usw) Die Datei brauchst du für den nächsten Befehl.

for %%f in ( Dienstzeiten_????_%1.csv ) do copy Monat%1.csv + %%f Monat%1.csv /B

Geht alle Dateien, die dem Kriterium in der Klammer entsprechen durch und setzt sie jeweils in die Variable %%f. Die Fragezeichen in der Klammer stehen für jeweils 1 beliebiges Zeichen, also insgesamt 4. %1 steht wieder für alle Dienstzeiten aus dem Monat 12. Für alle diese Dateien wird die Datei Monat12.csv um die jeweis gefundenen Dateien ergänzt. Der Parameter /B steht für binäres Kopieren, da es sonst nicht klappt.

move .\Dienstzeiten_????_%1.csv .\Sicherung\

Verschiebt alle Dateien, die dem Kriterium entsprechen in den Ordner Sicherung, der ein Unterordner des aktuellen Verzeichnisses ist. Der "." vor dem Backslash steht für das aktuelle Verzeichnis. Wenn dein Verzeichnis Sicherung woanders legt (z.B. c:\sicherung) musst du das anpassen.

Sag einfach mal, ob es so klappt!

Gruß roaxius

Danke für deine Hilfe!

Es hat sich dann noch rausgestellt, dass ich nicht einzelne Monate nehmen muss sondern, dass es reicht, wenn ich alle CSV-Dateien im Verzeichnis nehme!

Ich hab das jetzt so gemacht:

@ ECHO OFF

del booking.dat

echo off>booking.dat

for %%x in (*.csv) do copy /b booking.dat+%%x booking.dat

move .\*.csv .\sicherung

Kurz zur Erklärung. Die zu entstehende Datei muss booking.dat heißen und immer nur die aktuellen CSVs enthalten. Deswegen lösche ich eine evtl. vorhanden am Anfang und erzeuge dann eine leer neu. Weiß nicht ob das optimal so ist aber es geht! :-)

Das for ist ja so wie du mir geschrieben hast nur, das ich halt die Monatsunterscheidung nicht brauche. /b musste ich machen, weil wenn ich es weg gelassen habe hat copy hinter jede CSV (am Ende der letzten Zeile) ein Leerzeichen geschrieben. Mit /b macht es das nicht.

Ja auf jeden Fall danke nochmal für deine Hilfe hat mir auf jeden Fall sehr geholfen!! DANKE

Schön, dass es geklappt hat!

/B habe ich ja oben auch gemacht. Das steht für binäres Kopieren, weil er sonst tatsächlich Sonder- oder Leerzeichen erzeugt.

Das del booking. dat und anschließende echo... kannst du dir auch mit meinem Schritt sparen... "copy nul booking. dat" würde die Datei leer anlegen bzw. überschreiben. In einem Schritt halt.

Aber es klappt ja auch so, auch wenn ich das mit echo off > booking.dat so nicht kannte ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.