Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Neueste Dateien verarbeiten - per Batch, VBScript oder Powershell

Frage Entwicklung Batch & Shell

Mitglied: 48507

48507 (Level 2)

27.01.2010, aktualisiert 11:48 Uhr, 7516 Aufrufe, 7 Kommentare

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

01.
@ECHO OFF 
02.
 
03.
: Speicherort SQL-Abfrage 
04.
 
05.
set sqltxt=C:\sql.txt 
06.
 
07.
: Die Datei zeilenweise auslesen 
08.
FOR /f %%f IN (%sqltxt%) DO ( 
09.
 
10.
 zweite Schleife... 
11.
 
12.
13.
 
Weiter bin ich nicht gekommen. Kenn mich mit Batch nicht so aus. Wie könnte die zweite Schleife aussehen?
Mitglied: 60730
27.01.2010 um 11:58 Uhr
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


Gruß
Bitte warten ..
Mitglied: 48507
27.01.2010 um 12:06 Uhr
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.
Bitte warten ..
Mitglied: 60730
27.01.2010 um 12:13 Uhr
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)
Bitte warten ..
Mitglied: 48507
27.01.2010 um 12:35 Uhr
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.
Bitte warten ..
Mitglied: 60730
27.01.2010 um 12:44 Uhr
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. ;-(
Bitte warten ..
Mitglied: miniversum
27.01.2010 um 13:12 Uhr
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
Bitte warten ..
Mitglied: 48507
27.01.2010 um 14:28 Uhr
Astrein! Danke! Und es sind doch zwei Schleifen :-P
Bitte warten ..
Neuester Wissensbeitrag
Off Topic

"Ich habe nichts zu verbergen"

(2)

Erfahrungsbericht von FA-jka zum Thema Off Topic ...

Ähnliche Inhalte
Batch & Shell
Maximale Größe zu verarbeitender txt-Dateien mit Batch (5)

Frage von Muck1303 zum Thema Batch & Shell ...

Batch & Shell
HTML in Batch und Powershell (13)

Frage von michi-ffm zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch und Powershell (2)

Frage von michi-ffm zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Linux Netzwerk
gelöst DHCP vergibt keine Adressen (31)

Frage von Maik82 zum Thema Linux Netzwerk ...

Exchange Server
gelöst Bestehende eMails autoamatisch weiterleiten (22)

Frage von metal-shot zum Thema Exchange Server ...

Switche und Hubs
LAG zwischen SG300-Switches macht Probleme. Wer weiß Rat? (20)

Frage von White-Rabbit2 zum Thema Switche und Hubs ...

Apache Server
gelöst Lets Encrypt SSL mit Apache2 (20)

Frage von banane31 zum Thema Apache Server ...