baerbel99
Goto Top

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

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

Content-Key: 175842

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

Printed on: April 18, 2024 at 23:04 o'clock

Mitglied: 60730
60730 Nov 06, 2011 at 09:16:06 (UTC)
Goto Top
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ß
Member: bastla
bastla Nov 06, 2011 at 09:41:11 (UTC)
Goto Top
@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
Member: bastla
bastla Nov 06, 2011 at 10:16:12 (UTC)
Goto Top
... 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 face-wink) Ansatz:
@echo off & setlocal
set "Ordner=D:\Druck"  
set "Liste=D:\PDF-Liste_%date:~-4%-%date:~-7,2%-%date:~-10,2%.txt"  
set "Trenn=;"  
::Pfad zur installierten "pdftk.exe" 
set "pdftk=C:\Utils\pdftk.exe"  
set "Data=%temp%\PDF-Data.txt"  

del "%Liste%" 2>nul  
for %%i in ("%Ordner%\*.pdf") do call :ProcessFile "%%i"  
del "%Data%"  
goto :eof

:ProcessFile
:: Metadaten auslesen und zwischenspeichern
%pdftk% %1 dump_data>"%Data%"  
:: Seitenanzahl auslesen
for /f "tokens=2" %%a in ('findstr "NumberOfPages:" "%Data%"') do set "Seiten=%%a"  

set "ZeilenNr=" & set "Zeile=" & set "Erstellt=nicht gefunden"  
:: ZeilenNr für "CreationDate" suchen - Datum sollte in der nächsten Zeile stehen 
for /f "delims=:" %%a in ('findstr /n /c:"InfoKey: CreationDate" "%Data%"') do set "ZeilenNr=%%a"  
:: Wenn Zeile gefunden, nächste Zeile auslesen
if defined ZeilenNr for /f "delims=" %%a in ('more +%ZeilenNr% "%Data%"') do if not defined Zeile set "Zeile=%%a"  
:: Wenn nächste Zeile mit "InfoValue: D:" beginnt, Timestamp auslesen 
for /f "tokens=3 delims=:" %%a in ('echo %Zeile%^|findstr /b /c:"InfoValue: D:"') do set "Erstellt=%%a"  
:: Ausgabe
>>"%Liste%" echo %~nx1%Trenn%%Erstellt%%Trenn%%Seiten%  
goto :eof
Das Ausgabeformat des Erstellungszeitpunktes ließe sich bei Bedarf natürlich noch anpassen ...

Grüße
bastla
Member: baerbel99
baerbel99 Nov 06, 2011 at 14:50:20 (UTC)
Goto Top
Vielen Dank an alle face-smile

@bastla: Genial - Einfach klasse face-smile
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
 >> 
funktionieren - Tut es aber leider nicht.

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

---


Viele Grüße,
Member: bastla
bastla Nov 06, 2011 at 15:36:27 (UTC)
Goto Top
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
set "Eintrag=%~nx1%Trenn%%Erstellt%%Trenn%%Seiten%"  
findstr /x /c:"%Eintrag%" "%Liste%">nul 2>nul||>>"%Liste%" echo %Eintrag%  
ersetzen ...

Grüße
bastla