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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 175842
Url: https://administrator.de/forum/ordner-ueberwachen-und-tabelle-mit-ergebnis-anlegen-pdf-dateien-175842.html
Ausgedruckt am: 23.04.2025 um 16:04 Uhr
5 Kommentare
Neuester Kommentar

moin,
normalerweise müßte jetzt die Nummer vom Ross und Reiter kommen, aber seis drum...
Und das bedeutet z.B
PDFTK sei dir da nahegelegt.
Gruß
normalerweise müßte jetzt die Nummer vom Ross und Reiter kommen, aber seis drum...
- schau dir mal die Hilfe von For an for /?
- 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.
PDFTK sei dir da nahegelegt.
Gruß
@t-mo
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:
Grüße
bastla
P.S.: Und weil der Link zu den Downloads etwas ungewöhnlich benannt ist: Download pdftk
dir /B
... 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"
bastla
P.S.: Und weil der Link zu den Downloads etwas ungewöhnlich benannt ist: Download pdftk
... 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:
Das Ausgabeformat des Erstellungszeitpunktes ließe sich bei Bedarf natürlich noch anpassen ...
Grüße
bastla
@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
Grüße
bastla
Hallo baerbel99!
Wenn Du dann auch noch doppelte Einträge vermeiden wolltest, könntest Du Zeile 28 durch
ersetzen ...
Grüße
bastla
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%
Grüße
bastla