Sobald PDF-Datei im Verzeichnis PDF-Datei ausdrucken
Hallo,
Ich habe ein kleines Programm geschrieben, dass mir sobald eine PDF-Datei im Verzeichnis vorhanden ist diese ausdruckt und danach die Datei löscht.
Jetzt habe ich aber das Problem dass es die Datei manchmal garnicht druckt manchmal aber auch zweimal.
Ich lasse mir den Ausdruck in eine Log-Datei schreiben, und da taucht dann eben der Dateiname manchmal bis zu 4x auf.
Wenn der Dateiname nur einmal auftaucht, wurde nicht gedruckt, bei mehr als zweimal wurde auch zweimal gedruckt.
Wie kann ich das Programm ändern damit es die Datei immer einmal druckt?
Oder würdet Ihr das ganz anders bewerkstelligen?
:start
FOR %%p in ("C:\Dateien\PDF\*.pdf") do (
start "Ausdruck" "C:\Programme\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%%p"
timeout 0020
echo Druck = %%p %date% %time% >> Logdatei.log
kill /F AcroRd32.exe
del "%%p"
)
timeout 0020
goto start
Danke
Gruß Swister
Ich habe ein kleines Programm geschrieben, dass mir sobald eine PDF-Datei im Verzeichnis vorhanden ist diese ausdruckt und danach die Datei löscht.
Jetzt habe ich aber das Problem dass es die Datei manchmal garnicht druckt manchmal aber auch zweimal.
Ich lasse mir den Ausdruck in eine Log-Datei schreiben, und da taucht dann eben der Dateiname manchmal bis zu 4x auf.
Wenn der Dateiname nur einmal auftaucht, wurde nicht gedruckt, bei mehr als zweimal wurde auch zweimal gedruckt.
Wie kann ich das Programm ändern damit es die Datei immer einmal druckt?
Oder würdet Ihr das ganz anders bewerkstelligen?
:start
FOR %%p in ("C:\Dateien\PDF\*.pdf") do (
start "Ausdruck" "C:\Programme\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%%p"
timeout 0020
echo Druck = %%p %date% %time% >> Logdatei.log
kill /F AcroRd32.exe
del "%%p"
)
timeout 0020
goto start
Danke
Gruß Swister
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266795
Url: https://administrator.de/contentid/266795
Ausgedruckt am: 26.11.2024 um 07:11 Uhr
14 Kommentare
Neuester Kommentar
Hallo
Auf welchem Betriebssystem?
Der Befehl timeout funktioniert so?
Ich dachte, der Befehl lautet timeout /t 20??
In welchem Abstand werden denn die selben Dateien im Logfile aufgelistet?
Kann es sein, dass der Ausdruck noch nicht erfolgt ist, wenn der Batch das nächste Mal startet, und die Datei so mehrere Male zum Ausdruck geschickt wird, bevor sie gelöscht wird?
Gruss Urs
Auf welchem Betriebssystem?
Der Befehl timeout funktioniert so?
Ich dachte, der Befehl lautet timeout /t 20??
In welchem Abstand werden denn die selben Dateien im Logfile aufgelistet?
Kann es sein, dass der Ausdruck noch nicht erfolgt ist, wenn der Batch das nächste Mal startet, und die Datei so mehrere Male zum Ausdruck geschickt wird, bevor sie gelöscht wird?
Gruss Urs
Was auf deinem Rechner nicht passt, oder warum die Batch nicht läuft kann ich dir nicht sagen.
Aber ich gib dir nen Tipp:
Ich würde das in einem einfachen vb.net-Programm lösen
Für solch eine Sache vielleicht ohne Oberfläche ?!
Mit einem Timer im Hintergrund der (z.B. jede Minute) prüft ob eine neue PDF in dem Verzeichnis liegt.
Wenn ja dann print() und delete()
Sollte in Wenigen Minuten fertig programmiert sein, sind ja nur wenige zeilen.
Fertsch
Aber ich gib dir nen Tipp:
Ich würde das in einem einfachen vb.net-Programm lösen
Für solch eine Sache vielleicht ohne Oberfläche ?!
Mit einem Timer im Hintergrund der (z.B. jede Minute) prüft ob eine neue PDF in dem Verzeichnis liegt.
Wenn ja dann print() und delete()
Sollte in Wenigen Minuten fertig programmiert sein, sind ja nur wenige zeilen.
Fertsch
Moin Swister,
hatten wir hier auch schon mal ein schönes Powershell-Script zum Thema von @colinardo
PDF via Powershell drucken - Reader nach druck schließen
Gruß jodel
hatten wir hier auch schon mal ein schönes Powershell-Script zum Thema von @colinardo
PDF via Powershell drucken - Reader nach druck schließen
Gruß jodel
So also ich habe schnell was zusammengebastelt in vb.net
Die Pfade musst du natürlich anpassen, vielleicht sind auch noch 1-2 kleine Fehlerchen drin,
aber an sich sollte das so passen & funktionieren.
Die Pfade musst du natürlich anpassen, vielleicht sind auch noch 1-2 kleine Fehlerchen drin,
aber an sich sollte das so passen & funktionieren.
Imports System.IO
Public Class PrintDeletePDF
Private Sub PrintDeletePDF_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Form ausblenden da sie nicht gebraucht wird
Me.Visible = False
'Timer starten
tmrCheckPDF.Enabled = True
End Sub
Private Sub tmrCheckPDF_Tick(sender As Object, e As EventArgs) Handles tmrCheckPDF.Tick
'Array definieren
Dim array()
'Variablen definieren
Dim pfad As String = "C:\PDF"
Dim pdfname As String = ""
Dim i
Dim x
'Groesse des Arrays ermitteln
x = UBound(array)
'Dateien auslesen
array = Directory.GetFiles(pfad, "*pdf")
'Dateien drucken und loeschen
For i = 0 To x
Shell("C:\Programme\Adobe\Reader10\Reader\AcroRd32.exe /p /h " + array(i))
Shell("del " + pfad + array(i))
i = i + 1
Next
'Timer zuruecksetzen
tmrCheckPDF.Stop()
tmrCheckPDF.Start()
End Sub
End Class
@joehuaba
In Zeile 33 wird der Code aber mit Sicherheit das File vor dem Drucken gelöscht haben, oder eine Exception ausgelöst wenn das File gerade durch den Acrobat-Prozess gesperrt ist Die Shell wartet nicht auf das Beenden der Anwendung....
Ein FileSystemWatcher wäre hier auch eine geeignetere Variante um neue Files in einem Ordner zu detektieren.
Gruß jodel32
In Zeile 33 wird der Code aber mit Sicherheit das File vor dem Drucken gelöscht haben, oder eine Exception ausgelöst wenn das File gerade durch den Acrobat-Prozess gesperrt ist Die Shell wartet nicht auf das Beenden der Anwendung....
Ein FileSystemWatcher wäre hier auch eine geeignetere Variante um neue Files in einem Ordner zu detektieren.
Gruß jodel32
@114757
Stimmt, nicht aufgepasst :D
Naja war auch nur schnell zusammengebastelt
Aber wenn Swister ein bisschen VB kann, dann ist das auch wieder mit einer weiteren Zeile gelöst
Dann muss eben noch ein timeout eingebaut werden und ein
Ist zwar nicht die Beste Methode, eigentlich ist es sogar ein "bisschen" Pfusch, aber für dieses einfache Vorhaben würde es reichen
Da fällt mir gerade auf: Zeile 20 wird auch nicht gebraucht.
Und am Besten noch ein
in die Private Sub Timer bauen, falls wirklich ein Fehler geschmissen wird.
Danke an jodel32
Stimmt, nicht aufgepasst :D
Naja war auch nur schnell zusammengebastelt
Aber wenn Swister ein bisschen VB kann, dann ist das auch wieder mit einer weiteren Zeile gelöst
Dann muss eben noch ein timeout eingebaut werden und ein
Shell("kill /F AcroRd32.exe")
Ist zwar nicht die Beste Methode, eigentlich ist es sogar ein "bisschen" Pfusch, aber für dieses einfache Vorhaben würde es reichen
Da fällt mir gerade auf: Zeile 20 wird auch nicht gebraucht.
Und am Besten noch ein
Try
blablabla Code
Catch
End Try
in die Private Sub Timer bauen, falls wirklich ein Fehler geschmissen wird.
Danke an jodel32
So sollte das fertige vb-Programm in etwa aussehen:
Imports System.IO
Public Class PrintDeletePDF
Private Sub PrintDeletePDF_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'Form ausblenden da sie nicht gebraucht wird
Me.Visible = False
'Timer starten
tmrCheckPDF.Enabled = True
End Sub
Private Sub tmrCheckPDF_Tick(sender As Object, e As EventArgs) Handles tmrCheckPDF.Tick
Try
'Array definieren
Dim array()
'Variablen definieren
Dim pfad As String = "C:\PDF"
Dim i
Dim x
'Groesse des Arrays ermitteln
x = UBound(array)
'Dateien auslesen
array = Directory.GetFiles(pfad, "*pdf")
'Dateien drucken und loeschen
For i = 0 To x
Shell("C:\Programme\Adobe\Reader10\Reader\AcroRd32.exe /p /h " + array(i))
System.Threading.Thread.Sleep(7000) 'Wartet 7 Sekunden
Shell("kill /F AcroRd32.exe")
System.Threading.Thread.Sleep(3000) 'Wartet 3 Sekunden
Shell("del " + pfad + array(i))
i = i + 1
Next
'Timer zuruecksetzen
tmrCheckPDF.Stop()
tmrCheckPDF.Start()
Catch
MsgBox("Es ist ein Fehler aufgetreten.")
End Try
End Sub
End Class
Das "tmr" steht für Timer, damit man sich besser zurecht findet.
Du hast links im Programm eine Leiste (Die du vlt erst aufklappen musst) wo du Sachen wie
- Button
- TextBox
- etc
hast. Da gibt es auch einen Timer den du erst in deine Oberfläche des Programms ziehen musst.
Den benennst du dann "tmrCheckPDF". Das sollte das Problem lösen
Kann dir aber auch gern irgendwie das fertige VB-Projekt zukommen lassen !
Du hast links im Programm eine Leiste (Die du vlt erst aufklappen musst) wo du Sachen wie
- Button
- TextBox
- etc
hast. Da gibt es auch einen Timer den du erst in deine Oberfläche des Programms ziehen musst.
Den benennst du dann "tmrCheckPDF". Das sollte das Problem lösen
Kann dir aber auch gern irgendwie das fertige VB-Projekt zukommen lassen !