48507
Goto Top

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

@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?

Content-Key: 134463

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

Printed on: April 24, 2024 at 20:04 o'clock

Mitglied: 60730
60730 Jan 27, 2010 at 10:58:26 (UTC)
Goto Top
Servus,

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 face-wink


Gruß
Mitglied: 48507
48507 Jan 27, 2010 at 11:06:47 (UTC)
Goto Top
Spielt keine Rolle. Die PDFs werden anschließend per E-Mail versendet und danach gelöscht. Der Kunde soll neuere Versionen erhalten. Die PDFs werden von einer Datenbankanwendung erzeugt, da kann ich nichts tun.
Mitglied: 60730
60730 Jan 27, 2010 at 11:13:04 (UTC)
Goto Top
Zitat von @48507:
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)
Mitglied: 48507
48507 Jan 27, 2010 at 11:35:47 (UTC)
Goto Top
Die Angabe, welche PDF verschickt werden soll, kommt aus der Datenbank. Deswegen kann ich nur schwer glauben, dass ich mit einer Schleife auskomme. Aber solche Details kannst du natürlich nicht wissen und ich möchte über diese Kleinigkeiten hier nicht diskutieren, sondern nur eine Lösung der obigen Problembeschreibung. Es muss halt nicht immer wie bei Dr. House sein.
Mitglied: 60730
60730 Jan 27, 2010 at 11:44:16 (UTC)
Goto Top
okokokok...

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. ;-(
Member: miniversum
miniversum Jan 27, 2010 at 12:12:55 (UTC)
Goto Top
Versuchs mal so. Zu erst die Schleife die die Liste der Dateinamen durchgeht die von der DB geliefert werden:
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
Mitglied: 48507
48507 Jan 27, 2010 at 13:28:43 (UTC)
Goto Top
Astrein! Danke! Und es sind doch zwei Schleifen :-P