Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen (A bis Z)

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, 3940 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
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 PDF Datei erzeugen über Kommandozeile (6)

Frage von Xaero1982 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Virtualisierung

Docker Monitoring und Steuerung per "sen"

Tipp von Frank zum Thema Virtualisierung ...

Viren und Trojaner

Neues Botnetz über IoT-Geräte

(6)

Information von certifiedit.net zum Thema Viren und Trojaner ...

Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Heiß diskutierte Inhalte
Windows Installation
Windows 10 neu installieren (17)

Frage von imebro zum Thema Windows Installation ...

Router & Routing
Externe IP von innen erreichbar machen (15)

Frage von Windows10Gegner zum Thema Router & Routing ...

Windows Server
Frage zu Server Rack (11)

Frage von rainergugus zum Thema Windows Server ...