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

Ordner überwachen und Tabelle mit Ergebnis anlegen (PDF-Dateien)

Frage Entwicklung Batch & Shell

Mitglied: baerbel99

baerbel99 (Level 1) - Jetzt verbinden

06.11.2011 um 07:14 Uhr, 3935 Aufrufe, 5 Kommentare

Hallo liebes Forum,

ich habe folgendes Problem zu lösen:

Wir speichern automatisiert PDF-Dateien in einem Verzeichenis (D:/Druck). Ich hätte gerne eine Übersicht in einer Tabelle (gerne xls oder csv), die enthält:

Dateiname, Erstellzeitpunkt (Datum und Uhrzeit) und die Seitenanzahl des Dokuments

Dieser Vorgang soll einmal täglich per Task erfolgen.

Wer kann mir helfen? Lieben Dank und Viele Grüße
Mitglied: 60730
06.11.2011 um 10:16 Uhr
moin,

normalerweise müßte jetzt die Nummer vom Ross und Reiter kommen, aber seis drum...

  • schau dir mal die Hilfe von For an for /?
Da wirst du z.B %~tI - Erzeugt Datum und Zeit von %I. lesen.

  • Jetzt schaust du dir auch mal dir /? genau an

Und das bedeutet z.B
for /f %a in ('dir *.pdf /B /A-D /TC') do echo %a;%~ta

  • Wie du das nun zu einer Batch zusammenbauen kannst - versuch mal alleine.
PS: Seitenzahlen einer PDF Datei bekommst du nur mit 3rd party Werkzeugen raus.
PDFTK sei dir da nahegelegt.

Gruß
Bitte warten ..
Mitglied: bastla
06.11.2011 um 10:41 Uhr
@T-Mo
dir /B
wird eher wenig Freude machen - es wird ja trotzdem nur der Dateiname geliefert, und die ausgelesene Zeit ist der "Geändert"-Timestamp ...

... daher eher so:
for /f "tokens=1-2" %%a in ('dir /tc Datei.pdf|findstr /i /e /c:"Datei.pdf"') do set "DateCreated=%%a" & set "TimeCreated=%%b"
Grüße
bastla

P.S.: Und weil der Link zu den Downloads etwas ungewöhnlich benannt ist: Download pdftk
Bitte warten ..
Mitglied: bastla
06.11.2011 um 11:16 Uhr
... obwohl: Die PDF-Datei sollte ja in den Metadaten einen eigenen Erstellungs-Timestamp enthalten - dann wird's aber etwas kniffliger, daher gleich ein kompletter (kaum getesteter ) Ansatz:
01.
@echo off & setlocal 
02.
set "Ordner=D:\Druck" 
03.
set "Liste=D:\PDF-Liste_%date:~-4%-%date:~-7,2%-%date:~-10,2%.txt" 
04.
set "Trenn=;" 
05.
::Pfad zur installierten "pdftk.exe" 
06.
set "pdftk=C:\Utils\pdftk.exe" 
07.
set "Data=%temp%\PDF-Data.txt" 
08.
 
09.
del "%Liste%" 2>nul 
10.
for %%i in ("%Ordner%\*.pdf") do call :ProcessFile "%%i" 
11.
del "%Data%" 
12.
goto :eof 
13.
 
14.
:ProcessFile 
15.
:: Metadaten auslesen und zwischenspeichern 
16.
%pdftk% %1 dump_data>"%Data%" 
17.
:: Seitenanzahl auslesen 
18.
for /f "tokens=2" %%a in ('findstr "NumberOfPages:" "%Data%"') do set "Seiten=%%a" 
19.
 
20.
set "ZeilenNr=" & set "Zeile=" & set "Erstellt=nicht gefunden" 
21.
:: ZeilenNr für "CreationDate" suchen - Datum sollte in der nächsten Zeile stehen 
22.
for /f "delims=:" %%a in ('findstr /n /c:"InfoKey: CreationDate" "%Data%"') do set "ZeilenNr=%%a" 
23.
:: Wenn Zeile gefunden, nächste Zeile auslesen 
24.
if defined ZeilenNr for /f "delims=" %%a in ('more +%ZeilenNr% "%Data%"') do if not defined Zeile set "Zeile=%%a" 
25.
:: Wenn nächste Zeile mit "InfoValue: D:" beginnt, Timestamp auslesen 
26.
for /f "tokens=3 delims=:" %%a in ('echo %Zeile%^|findstr /b /c:"InfoValue: D:"') do set "Erstellt=%%a" 
27.
:: Ausgabe 
28.
>>"%Liste%" echo %~nx1%Trenn%%Erstellt%%Trenn%%Seiten% 
29.
goto :eof
Das Ausgabeformat des Erstellungszeitpunktes ließe sich bei Bedarf natürlich noch anpassen ...

Grüße
bastla
Bitte warten ..
Mitglied: baerbel99
06.11.2011 um 15:50 Uhr
Vielen Dank an alle

@bastla: Genial - Einfach klasse
Leider verstehe ich nur etwas von php, da könnte ich den timestamp anpassen.
Wie erfolgt es hier? Mein Wunschformat wäre: DD.MM.YYYY, HH:MM:SS

Wenn möglich, dann würde ich gerne doch eine Liste pro Monat führen (so ist die Summierung einfacher).

Die erforderliche Anpassung wäre:

set "Liste=D:\druck\PDF-Liste_%date:~-4%-%date:~-7,2%"

---
Aber: Wie bekomme ich es hin, dass die Batch am nächsten Tag nur anhängt, also die Datei fortschreibt, nicht aber die Datei überschreibt?
Eigentlich sollte es ja durch die
01.
 >> 
funktionieren - Tut es aber leider nicht.

EDIT:
Das habe ich nun gelöst: Die Zeile
01.
del "%Liste%" 2>nul
habe ich entfernt

---



Viele Grüße,
Bitte warten ..
Mitglied: bastla
06.11.2011 um 16:36 Uhr
Hallo baerbel99!
Mein Wunschformat wäre: DD.MM.YYYY, HH:MM:SS
Sollte so gehen (vor Zeile 28 einfügen):
set "Erstellt=%Erstellt:~6,2%.%Erstellt:~4,2%.%Erstellt:~0,4%, %Erstellt:~8,2%:%Erstellt:~10,2%:%Erstellt:~12,2%"
Wie bekomme ich es hin, dass die Batch am nächsten Tag nur anhängt, also die Datei fortschreibt, nicht aber die Datei überschreibt?
Indem Du Zeile 9 entfernst / auskommentierst ...

Wenn Du dann auch noch doppelte Einträge vermeiden wolltest, könntest Du Zeile 28 durch
01.
set "Eintrag=%~nx1%Trenn%%Erstellt%%Trenn%%Seiten%" 
02.
findstr /x /c:"%Eintrag%" "%Liste%">nul 2>nul||>>"%Liste%" echo %Eintrag%
ersetzen ...

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Outlook & Mail
gelöst Outlook Ordner überwachen und darin abgelegte Mails einzeln weiter leiten (2)

Frage von Looser27 zum Thema Outlook & Mail ...

Batch & Shell
gelöst Batch Datei: PDF Dateien verschieben, umbenennen und löschen (4)

Frage von F0rcehunter zum Thema Batch & Shell ...

Batch & Shell
gelöst Suche Batch-Programm zum Zusammenfügen zweier PDF-Dateien (3)

Frage von Sinzal zum Thema Batch & Shell ...

Neue Wissensbeiträge
Rechtliche Fragen

Heiseshow, live ab 12 Uhr: Steht die Vorratsdatenspeicherung vor dem Aus?

Tipp von sabines zum Thema Rechtliche Fragen ...

Outlook & Mail

Outlook Probleme nach Juni Updates - KB3203467 ist Schuld

(1)

Information von Deepsys zum Thema Outlook & Mail ...

Microsoft Office

Windows 7, Office 2016 RTM und Updates ohne WSUS

Tipp von chgorges zum Thema Microsoft Office ...

E-Mail

Thunderbird 52 hat Druckprobleme

(3)

Tipp von magicteddy zum Thema E-Mail ...

Heiß diskutierte Inhalte
Server-Hardware
Einem Stromausfall entgegen wirken (26)

Frage von OIOOIOOIOIIOOOIIOIIOIOOO zum Thema Server-Hardware ...

Humor (lol)
Aktuell keine IT Probleme (22)

Frage von lordofremixes zum Thema Humor (lol) ...

Festplatten, SSD, Raid
PC stellt nach dem Bios ab (20)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...