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

sputnik (Level 2) - Jetzt verbinden

27.01.2010, aktualisiert 11:48 Uhr, 7502 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: sputnik
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 sputnik:
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: sputnik
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: sputnik
27.01.2010 um 14:28 Uhr
Astrein! Danke! Und es sind doch zwei Schleifen :-P
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

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

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Mehrere PDF-Dateien per Batch zusammenfügen (1)

Frage von Grimmli zum Thema Batch & Shell ...

Entwicklung
gelöst Mit Batch,VBS,Powershell Windows einrichten (1)

Frage von Justin98 zum Thema Entwicklung ...

Batch & Shell
Google drive komplexer upload per batch oder powershell (6)

Frage von functionstrut zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...