
48507
27.01.2010, aktualisiert um 11:48:32 Uhr
Neueste Dateien verarbeiten - per Batch, VBScript oder Powershell
Moin,
folgende Situation:
Eine SQL-Abfrage liefert eine Liste mit bestimmten Nummern. Zu den Nummern gibt es PDF-Dateien. Die PDF soll kopiert werden.
Problem: Zu einer Nummer kann es mehrere PDF-Dateien geben (neuere Versionen).
Beispiel:
RE2009NRW003670.pdf gehört zu 2009NRW003670
RE2009NRW003670.02.pdf gehört ebenfalls zu 2009NRW003670, neuere Version
Um die neueste Version zu bekommen, muss ich also nach dem Datum filtern, da in der Datenbank nur 2009NRW003670 gespeichert wird (und ohne RE davor).
Weiter bin ich nicht gekommen. Kenn mich mit Batch nicht so aus. Wie könnte die zweite Schleife aussehen?
folgende Situation:
Eine SQL-Abfrage liefert eine Liste mit bestimmten Nummern. Zu den Nummern gibt es PDF-Dateien. Die PDF soll kopiert werden.
Problem: Zu einer Nummer kann es mehrere PDF-Dateien geben (neuere Versionen).
Beispiel:
RE2009NRW003670.pdf gehört zu 2009NRW003670
RE2009NRW003670.02.pdf gehört ebenfalls zu 2009NRW003670, neuere Version
Um die neueste Version zu bekommen, muss ich also nach dem Datum filtern, da in der Datenbank nur 2009NRW003670 gespeichert wird (und ohne RE davor).
@ECHO OFF
: Speicherort SQL-Abfrage
set sqltxt=C:\sql.txt
: Die Datei zeilenweise auslesen
FOR /f %%f IN (%sqltxt%) DO (
zweite Schleife...
)
Weiter bin ich nicht gekommen. Kenn mich mit Batch nicht so aus. Wie könnte die zweite Schleife aussehen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 134463
Url: https://administrator.de/forum/neueste-dateien-verarbeiten-per-batch-vbscript-oder-powershell-134463.html
Ausgedruckt am: 13.05.2025 um 12:05 Uhr
7 Kommentare
Neuester Kommentar

Servus,
so ganz klar ist mir das aber nicht...
Wenn Du die Dateien immer und immer wieder neu erzeugst und danach kopierst, wirst du irgendwann einen richtigen Datensatzsalat haben.
Wenn die Dateien aber verschoben werden - fällt doch die Hälfte deiner Probleme weg.
Du sprichst "Schleife" an - und meinst damit For
For /? liefert dir
%~nI - Erzeugt nur den Dateinamen von %I.
genauer an
Gruß
so ganz klar ist mir das aber nicht...
- Die PDF soll kopiert werden.
- Zu einer Nummer kann es mehrere PDF-Dateien geben (neuere Versionen).
Wenn Du die Dateien immer und immer wieder neu erzeugst und danach kopierst, wirst du irgendwann einen richtigen Datensatzsalat haben.
Wenn die Dateien aber verschoben werden - fällt doch die Hälfte deiner Probleme weg.
Du sprichst "Schleife" an - und meinst damit For
For /? liefert dir
%~nI - Erzeugt nur den Dateinamen von %I.
genauer an
Gruß

Zitat von @48507:
Spielt keine Rolle. Die PDFs werden anschließend per E-Mail versendet und danach gelöscht.
Spielt keine Rolle. Die PDFs werden anschließend per E-Mail versendet und danach gelöscht.
Was oder wer?
Naja - das hört sich doch schon wieder anders an - schau mal nach Blat / Bmail
Der Kunde soll neuere Versionen erhalten. Die PDFs werden von einer Datenbankanwendung erzeugt, da kann ich nichts tun.
Doch kannst du dein "Problem" gehört zu denen, das ganz sicher mit einer Schleife und nicht mit zweien gelöst wird und das genauso hier schon mindestens 5* gepostet und gelöst wurde.
(und das mit dem nachträglichen löschen - oder gleich in einen Ordner 4mail zu verschieben - mag vielleicht doch eine Rolle spielen)

okokokok...
eine Schleife:
Kann man das glauben oder auch nicht.
Und sorry, das ich dir keine fixundfertige Varianten liefere, aber die gibts schon.
Und das ich dir mit Hilfe zur Selbsthilfe helfen möchte - ist dir auch noch nicht aufgefallen. ;-(
eine Schleife:
FOR /f %%f IN (%sqltxt%) DO
und%~nI - Erzeugt nur den Dateinamen von %I.
- wenn man(n) jetzt entweder %%f oder %%i - oder noch einen anderen Buchstaben (immer wieder) in dieser einen Schleife benutzt.Kann man das glauben oder auch nicht.
ich möchte über diese Kleinigkeiten hier nicht diskutieren,
genauso gehts mir auch - schau doch einfach mal in diesem Forum wie oft dein Problem hier schon gepostet und geBastlat wurde - ich tippe auf 5* mindestens.Und sorry, das ich dir keine fixundfertige Varianten liefere, aber die gibts schon.
Und das ich dir mit Hilfe zur Selbsthilfe helfen möchte - ist dir auch noch nicht aufgefallen. ;-(
Versuchs mal so. Zu erst die Schleife die die Liste der Dateinamen durchgeht die von der DB geliefert werden:
In der Dateisuche Prozedur erhälst du diesen Teil als %1. Nun musst du also ein Verzeichniss durchsuchen nach allen Dateien die diesen namen haben RE%1*.pdf und diese Liste nach Datum sortieren.
Das geht mit dem dir Befehl mit entsprechendem Parameter zum Sortieren nach dem Datum.
Wenn du das ganze so sortierst das die aktuellste datei unten steht kannst du diese Liste abarbeiten udn die letzte Datei in eine Variable schreiben
miniversum
FOR /f %%f IN (%sqltxt%) DO ( )
In dieser Schleife kannst du eine Unterprozedur mit call aufrufen die der für jeden Dateinamen den aktuellen Dateinamen liefert und diesen weiterverarbeitet.call:Dateisuche "%%f"
In der Dateisuche Prozedur erhälst du diesen Teil als %1. Nun musst du also ein Verzeichniss durchsuchen nach allen Dateien die diesen namen haben RE%1*.pdf und diese Liste nach Datum sortieren.
Das geht mit dem dir Befehl mit entsprechendem Parameter zum Sortieren nach dem Datum.
Wenn du das ganze so sortierst das die aktuellste datei unten steht kannst du diese Liste abarbeiten udn die letzte Datei in eine Variable schreiben
FOR /f %%i IN ('dir RE%1*.pdf /Parameter_selbst_suchen') DO set Dateiname=%%i
Nach dieser Zeile steht also der Dateiname der aktuellsten Version in der Variable %Dateiname%miniversum