nulpen
Goto Top

Fehlerabfrage im Batchscript

Hallo Leute,
das letzte mal wurde mir klasse geholfen, vielleicht habe ich wieder Glück..... ;)

Folgendes Szenario:

Es werden PDFS in Ordner verschoben und von dort ausgedruckt, dazu gibt es verschiedene Ordner für die verschiedene Drucker .

Ich lasse dazu eine Endlos Batchdatei laufen die immer wieder diese Ordner überwacht.

Wenn jetzt ein PDF dort landet wird

a) der Standarddrucker automatisch auf den z.b: DRUCKER1 umgestellt
b) Adober Reader geöffnet
c)dDas Dokument ausgedruckt
d) Adobe geschlossen
e) das PDF gelöscht
f) Der Standarddrucker wieder umgestellt
g) es wird wieder an den Anfang gesprungen

Klappt alles soweit, ich lasse den Adobe mit TSKILL beenden.

Was mache ich aber für den Fall daß

1. Eine Große Datei gedruckt wird und daher nicht sofort der Adobe geschlossen werden kann (Zeitschleifen Errorlevelabfragen ?)
2. Bereits die nächste Datei kommt und ggf. 2 Files im Ordner liegen (1 wird gerade gedruckt, die zweite ist schon da, also der DEL *.PDF würde auch die 2. killen)

Ich habe mal mit ERRORLEVEL experimentiert komme aber nicht weiter.

Wenn ich das ROH-Script mal posten soll bitte melden

Danke
Ralf

Content-Key: 142013

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

Printed on: April 25, 2024 at 14:04 o'clock

Member: bastla
bastla May 03, 2010 at 15:41:41 (UTC)
Goto Top
Hallo nulpen!

Was den Fall "2 oder mehr Dateien" angeht, sollte es doch möglich sein, diese Dateien per Schleife, zB
for %%i in ("D:\Der Druckerordner\*.pdf") do ( ...
einzeln an den "Adobe Reader" zu übergeben und dann auch einzeln zu löschen ...

Grüße
bastla
Mitglied: 77559
77559 May 03, 2010 at 16:26:45 (UTC)
Goto Top
Zitat von @nulpen:
Wenn ich das ROH-Script mal posten soll bitte melden

Hallo Ralf, das wird nötig sein.
Denn solange wir nicht wissen wie du die Schritte b), c) und d) ausführst, ist es schwer zu helfen.

Gruß
LotPings
Member: nulpen
nulpen May 03, 2010 at 16:51:00 (UTC)
Goto Top
HIER DAS ROHSCRIPT

:Start
REM --------------------- Überprüfen ob Datei vorhanden --------------------------

if exist "D:\STAPEL\SIP\*.PDF" goto K80
if exist "D:\TEST\PDFDRUCK\EINSEITIG\*.pdf" goto XPS
if exist "D:\TEST\PDFDRUCK\BRIEFKOPF\*.pdf" goto K80
if exist "D:\TEST\PDFDRUCK\BILANZ\*.pdf" goto SHARP

goto START


:K80
REM ---------------Standarddrucker umstellen --------------------------------------

rundll32 printui.dll,PrintUIEntry /y /n K80

echo Errorlevel ist: [%errorlevel%]
pause

REM ----------------Datei ausgeben ------------------------------------------------

@for %%p in ("D:\STAPEL\SIP\*.pdf") do "C:\Programme\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%%p"

echo Errorlevel ist: [%errorlevel%]
pause

REM ----------------------PDF löschen -----------------------------------------------

del D:\STAPEL\SIP\*.pdf

echo Errorlevel ist: [%errorlevel%]
pause


REM ----------------------------Standarddrucker umstellen --------------------------------

rundll32 printui.dll,PrintUIEntry /y /n SHARP

echo Errorlevel ist: [%errorlevel%]

pause
tskill AcroRd32 /A
pause

:end

echo Errorlevel ist: [%errorlevel%]

goto START

***
Die Pausen und die Errorlevels habe ich nur für mich eingesetzt, für jeden DRUCKER gibt es dann weitere Sprungadressen

Ich muß ohne Pausen die angesprochenen Fehler ausmerzen, damit das Script nicht schneller läuft als die Dateien verarbeitet und
gedruckt werden.

Auch muß gewährleistet sein daß eine große noch nicht fertige PDF die schon Namen und Dateiendung trägt als Druckfertig angesehen
wird. Daher die Abfrage der Errorlevels.
Mitglied: 77559
77559 May 03, 2010 at 17:44:44 (UTC)
Goto Top
Hallo Ralf,

Bitte formatiere deinen Code zur besseren Les-/Referenzier-barkeit unbedingt mit den dafür vorgesehenen in der Formatierungshilfe
Ich habe in dieser Batch Zeile 21 abgeändert, einige Pausen und tskill entsorgt ohne die Logik ansonsten nach zu vollziehen.
Die Batch sollte warten bis Adobe Reader mit Drucken fertig ist.

@Echo off
:Start
REM --------------------- Überprüfen ob Datei vorhanden --------------------------

if exist "D:\STAPEL\SIP\*.PDF" goto K80  
if exist "D:\TEST\PDFDRUCK\EINSEITIG\*.pdf" goto XPS  
if exist "D:\TEST\PDFDRUCK\BRIEFKOPF\*.pdf" goto K80  
if exist "D:\TEST\PDFDRUCK\BILANZ\*.pdf" goto SHARP  

goto START

:K80
REM ---------------Standarddrucker umstellen --------------------------------------

rundll32 printui.dll,PrintUIEntry /y /n K80

echo Errorlevel ist: [%errorlevel%]

REM ----------------Datei ausgeben ------------------------------------------------

@for %%p in ("D:\STAPEL\SIP\*.pdf") do Start /Wait "PDF-Druck" "C:\Programme\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%%p"  

echo Errorlevel ist: [%errorlevel%]

REM ----------------------PDF löschen -----------------------------------------------

del D:\STAPEL\SIP\*.pdf

echo Errorlevel ist: [%errorlevel%]

REM ----------------------------Standarddrucker umstellen --------------------------------

rundll32 printui.dll,PrintUIEntry /y /n SHARP

echo Errorlevel ist: [%errorlevel%]
Pause
goto START

Gruß
LotPings
Member: nulpen
nulpen May 03, 2010 at 18:02:03 (UTC)
Goto Top
Danke !

TSKILL brauche ich doch um ADOBE wieder zu schliessen, die Pausen habe ich nur für die Testphase, natürlich muß das Ding ohne Pause laufen.

Auch die Ausgabe der Errorlevels waren für mich nur die Kontrolle welcher Fehler überhaupt ausgegeben wird.

Ich dachte an eine Abfrage nach dem Errorlevel und dann entsprechende Sprungadressen je nach Position der Batchdatei.

Danke
Ralf
Mitglied: 77559
77559 May 03, 2010 at 18:55:54 (UTC)
Goto Top
Hallo Ralf,
hast du alternativ mal den Command line switch /t versucht?
der sollte im Hintergrund öffnen, drucken und auch wieder schließen, siehe hier damit sollte auch die Druckerauswahl funktionieren, ich kann das derzeit nicht selber testen.

Gruß
LotPings
Mitglied: 60730
60730 May 04, 2010 at 09:06:10 (UTC)
Goto Top
Salü,

unabhängig von den anderen Tipps würde ich das ganze Batch noch kürzen und die vielen doppelten/dreifachen Schritte weglassen.
ungetestet aus dem Bauch

:checkit
if exist "D:\STAPEL\SIP\*.PDF" set "print"=="D:\STAPEL\SIP\"  && rundll32 printui.dll,PrintUIEntry /y /n K80  
rem usw.

:DOIT
for %%p in ("%print%\*.pdf") do (  
                                Start /Wait "PDF-Druck" "C:\Programme\Adobe\Reader 8.0\Reader\AcroRd32.exe" /p /h "%%p"  
                                del "%print%\%%p"  
)


Gruß