it-muscle
Goto Top

Batch-Datei zum halbautomatisierten Drucken!

Hallo liebe IT-Gemeinde... ich glaube das Thema "Batch" wurde hier schon oft behandelt, aber da ich nichts passendes gefunden hab und im Moment irgendwie grade total auf dem Schlauch stehe brauch ich mal eure Hilfe!

Folgendes: ....

ich brauche eine Batchdatei:

diese soll am Anfang fragen...

"Welche Datei möchten Sie drucken?"

der Benutzer soll nun eingeben: dateiname + endung (endungen können *.dru, *.brl oder *.prt sein) und bestätigen

Danach soll die Batchdatei fragen in welcher Anzahl diese Datei gedruckt werden soll?

hier soll der Benutzer einfach eine Zahl eingeben und bestätigen!

nun soll der Benutzer noch angeben ob der Auftrag an Drucker 1 (LPT1) oder Drucker 2 (LPT 2) geschickt werden soll!

am Besten wäre jetzt eine Auswahl

(1) Drucker 1
(2) Drucker 2

.. der Benutzer drückt nun einfach 1 oder 2 und der PC sendet die Datei mit einem COPY Befehl in gewünschter Anzahl an den Drucker! Wichtig ist halt, dass man copy und nicht print sagt, da es spezielle Dateien sind, wie ihr an der Endung merkt!

Zum Schluss sollte die Batchdatei noch fragen:

"sind noch weitere Dokumente zu drucken?"

bei JA (J) fängt die Datei von vorne an.. bei NEIN (N) wird sie beendet..


ich hab zwar ne ungefähre Vorstellung der Batchdatei nur irgendwie steh ich im Moment komplett auf dem Schlauch und vielleicht sind unter euch ja ein paar Batch-Experten die mir bei dieser Sache helfen können! Ich denke nicht, dass die Batch all zu umfangreich ist, nur wie gesagt fällt mir im Moment einfach nichts ein face-sad

Vielen Dank schon mal!

Liebe Grüße und ein schönes Wochenende,
Euer IT-Muscle!


EDIT: Achso noch wichtig,.. die zu druckenden Dateien liegen in einem Netzlaufwerk im Ordner DATEN, DATEN1, DATEN2 und eventuell noch in Unterordnern!.. natürlich sollte die Batchdatei prüfen, ob die Datei aufzufinden ist!.. oder eben sich die Datei aus den Ordnern raussuchen!.. vielen Dank face-smile

Content-ID: 127285

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

laster
laster 16.10.2009 um 13:18:51 Uhr
Goto Top
Hallo IT-Muscle,

mit den Kommando set kannst Du schon viel machen:

set /p DATEI=Zu druckende Datei angeben:
set /p PORT=Druckerport auswaehlen (1 oder 2):
copy /b %DATEI% lpt%PORT%

zwischendurch noch ein Paar Abfragen if "%DATE%"=="" goto FEHLER ... und Deine Batchdatei kann verwendet werden.

vG
Lars
bastla
bastla 16.10.2009 um 15:00:29 Uhr
Goto Top
... und noch ein
for /L für den Mehrfachdruck und
for /f "delims=" %%i in ('dir /s /b "D:\Basisordner\%Datei%"') do , damit's auch mit dem Finden in den Unterordnern klappt ...

Grüße
bastla
IT-Muscle
IT-Muscle 26.10.2009 um 10:36:21 Uhr
Goto Top
Hallo!.. ich danke euch beiden für eure Hilfe!.. ich hab mir jetzt schon mal einen Quelltext gebastelt, aber leider steigt der nachdem ich den Dateinamen eingegeben hab aus.. hab ich irgendwo nen Denkfehler?

@echo off
cd\
D:
cls
:START
echo Programm ist bereit!
echo.
pause
cls
:MENU
echo ----------------------------------------------------------------------
echo              XXXXXXXXXXXX 1.0 - By xXxxxxxxx
echo ----------------------------------------------------------------------
echo.
echo Bitte geben Sie den zu druckenden Dateinamen samt
echo Dateiendungen mit Hilfe der Tastatur ein! 
echo Darauf achten, dass der PS-Drucker eingeschaltet ist!
echo (*.dru, *.brl, *. prt koennen gedruckt werden!)
echo.
echo Was moechten Sie tun?
echo.
echo    1. *.brl, *.dru oder *.prt drucken
echo.
echo    2. Programm verlassen
echo.

set /p choice=Bitte auswaehlen:

if "%choice%"=="1" goto :DATEI  
if "%choice%"=="2" goto :eof  
exit

:DATEI
set /p druck=Datei:

IF "%druck%" EXISTS goto :ANZAHL  
IF "%druck%" NOT EXISTS goto :ERROR  

:ANZAHL
echo Bitte geben Sie nun die Anzahl ein!

set /p anzahl=Anzahl:
goto :DRUCKER

:DRUCKER
echo Bitte entscheiden Sie ob Sie an Thiel1 oder Thiel2 drucken
echo (1) Thiel Beta X3 (Thi1)
echo (2) Thiel Beta X3 (Thi2)
echo.

set /p auswahl=Bitte Drucker auswählen:

if "%auswahl%"=="1" goto :Thi1  
if "%auswahl%"=="2" goto :Thi2  

echo 

:Thi1

for /L %%druck IN (1,1,%%anzahl) DO copy %%druck lpt1
echo Befehl erfolgreich ausgefuehrt.
echo.
goto :MENU

:Thi2

for /L %%druck IN (1,1,%%anzahl) DO copy %%druck lpt2
echo Befehl erfolgreich ausgefuehrt.
echo.
goto :MENU

:ERROR
echo Befehl kann leider nicht ausgefuehrt werden,
echo da Datei nicht gefunden werden kann oder
echo falsch geschrieben wurde!
echo.
echo Bitte achten Sie auf Dateiname und Dateiendung!
echo.
goto :DATEI


danke euch schon mal vielmals!!

gruß,
IT-Muscle
bastla
bastla 26.10.2009 um 20:33:04 Uhr
Goto Top
Hallo IT-Muscle!

Ist zwar nur eher oberflächlich getestet, sollte aber etwa so gehen:
@echo off & setlocal
cd /d D:\
cls
:START
echo Programm ist bereit!
echo.
pause
cls
:MENU
echo ----------------------------------------------------------------------
echo              XXXXXXXXXXXX 1.0 - By xXxxxxxxx
echo ----------------------------------------------------------------------
echo.
echo Bitte geben Sie den zu druckenden Dateinamen samt
echo Dateiendungen mit Hilfe der Tastatur ein! 
echo Darauf achten, dass der PS-Drucker eingeschaltet ist!
echo (*.dru, *.brl, *. prt koennen gedruckt werden!)
echo.
echo Was moechten Sie tun?
echo.
echo    1. *.brl, *.dru oder *.prt drucken
echo.
echo    2. Programm verlassen
echo.

set /p choice=Bitte auswaehlen: 

if "%choice%"=="1" goto :DATEI  
if "%choice%"=="2" goto :eof  
goto :eof

:DATEI
set /p druck=Datei: 

IF NOT EXIST "%druck%" goto :ERROR  

:ANZAHL
echo Bitte geben Sie nun die Anzahl ein!

set anzahl=1
::Falls keine Eingabe erfolgt, wird nur ein Ausdruck vorgenommen
set /p anzahl=Anzahl: 

set /a Check=0+Anzahl
if "%Check%"=="0" goto :ANZAHL  

echo\
echo Es werden %anzahl% Ausdrucke erfolgen.
echo\

:DRUCKER
echo Bitte entscheiden Sie, ob Sie an Thiel1 oder Thiel2 drucken
echo (1) Thiel Beta X3 (Thi1)
echo (2) Thiel Beta X3 (Thi2)
echo.

set /p auswahl=Bitte Drucker auswaehlen: 
if "%auswahl%"=="1" goto :Thi1  
if "%auswahl%"=="2" goto :Thi2  

echo\
goto :DRUCKER

:Thi1

for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt1>nul  
echo Befehl erfolgreich ausgefuehrt.
echo.
goto :MENU

:Thi2

for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt2>nul  
echo Befehl erfolgreich ausgefuehrt.
echo.
goto :MENU

:ERROR
echo Befehl kann leider nicht ausgefuehrt werden,
echo da Datei nicht gefunden werden kann oder
echo falsch geschrieben wurde!
echo.
echo Bitte achten Sie auf Dateiname und Dateiendung!
echo.
goto :DATEI
Grüße
bastla
IT-Muscle
IT-Muscle 27.10.2009 um 07:55:56 Uhr
Goto Top
Hey Bastla,

schon mal vielen Dank... also brauchte ich oben das IF EXISTS gar nicht..

was bedeutet denn in Zeile 01 das mit dem "& set local"?? das hab ich zwar irgendwo schon mal gehört (wie so vieles^^) aber ich kann mir grad nicht helfen.. face-sad

naja ich danke dir vielmals für die Verbesserung!.. ich werde sehen ob das Teil in der Praxis anstellt, was ich theoretisch wollte und dann hier als "gelöst" markieren, falls dem so ist!..

aber schon mal "daumen hoch" an Dich!

gruß

EDIT: .. Die Batch funktioniert soweit! Das Problem was ich jetzt nur habe ist, dass die Dateien im Stammverzeichnis liegen müssen! Das ist leider aber nicht machbar ich hab 3 Ordner und in denen gibt es teilweise auch noch Unterordner.. was genau muss ich jetzt dem Programm sagen, dass es bei :DATEI auch in den Unterordnern nach diesen Dingen sucht?

EDIT2: Ok..das Problem mit den Unterordnern hab ich jetzt so gelöst:

	:DATEI 
	
	set /p druck=Datei:  
	
	:: Befehl für Druck in den unterordnern zu suchen?!
	for %%f In (G:\"%druck%" G:\"%druck%") Do goto Anzahl  
	IF NOT EXIST "%druck%" goto :ERROR  

allerdings wenn ich das Ding jetzt in der Praxis teste läuft das ganze ohne einen Ausdruck abface-sad(.. was mach ich falsch? hab ich irgendwo einen Denkfehler bei den Druckern? oder setzt meine Zeile oben irgendwas außer Kraft?

die drucker werden bei Start der PCs mit NET USE (eigenständiger BAT-Datei) jeweils auf LPT1 und 2 gemountet! (das funktioniert auch einfach und ordnungsgemäß, wie auch, wenn man zu fuss einen copy-druck-befehl losschickt!)

hier nochmal der ganze Quelltext zur besseren Übersicht:

@echo off & setlocal
title xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cd /d G:\
cls
:START
echo Programm ist bereit!
echo.
pause
cls

:: Programmstart
	
:MENU
echo ----------------------------------------------------------------------
echo          xxxxxxxxxxxxxxxxxx - xxxxxxxxxxxxxxxxxxxxxxx
echo ----------------------------------------------------------------------
echo.
echo Bitte geben Sie den zu druckenden Dateinamen samt
echo Dateiendungen mit Hilfe der Tastatur ein! 
echo Darauf achten, dass der PS-Drucker eingeschaltet ist!
echo (*.dru, *.brl, *. prt koennen gedruckt werden!)
echo.
echo Was moechten Sie tun?
echo.
echo    (1) *.brl, *.dru oder *.prt drucken
echo.
echo    (2) Programm verlassen
echo.

set /p choice=Bitte auswaehlen:

if "%choice%"=="1" goto :DATEI  
if "%choice%"=="2" goto :eof  
exit

:: Auswahlmenü der Druckautomatik

	:DATEI 
	
	set /p druck=Datei:  
	
	:: Befehl für Druck in den unterordnern zu suchen?!
	for %%f In (G:\"%druck%" G:\"%druck%") Do goto Anzahl  
	IF NOT EXIST "%druck%" goto :ERROR  

		:ANZAHL 
		echo Bitte geben Sie nun die Anzahl ein! 
		set anzahl=1 

		set /p anzahl=Anzahl:  
 
		set /a Check=0+Anzahl 
		if "%Check%"=="0" goto :ANZAHL   

		::Falls keine Eingabe erfolgt, wird nur ein Ausdruck vorgenommen 
		echo\ 
		echo Es werden %anzahl% Ausdrucke erfolgen. 
		echo\ 

			:DRUCKER 
			echo Bitte entscheiden Sie, ob Sie an Thiel1 oder Thiel2 drucken 

			echo (1) Thiel Beta X3 (Thi1) 
			echo (2) Thiel Beta X3 (Thi2) 
			echo. 
			
			set /p auswahl=Bitte Drucker auswaehlen:  
			
			if "%auswahl%"=="1" goto :Thi1   
			if "%auswahl%"=="2" goto :Thi2   
			echo\ 
			goto :DRUCKER 

				:Thi1 
				for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt1>nul  
				echo Befehl erfolgreich ausgefuehrt. 
				echo. 
				goto :MENU 

				:Thi2 
				for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt2>nul   
				echo Befehl erfolgreich ausgefuehrt. 
				echo. 
				goto :MENU 

					
					:ERROR 
					echo Befehl kann leider nicht ausgefuehrt werden, 
					echo da Datei nicht gefunden werden kann oder 
					echo falsch geschrieben wurde! 
					echo. 
					echo Bitte achten Sie auf Dateiname und Dateiendung! 
					echo. 
					goto :DATEI
bastla
bastla 27.10.2009 um 17:55:47 Uhr
Goto Top
Hallo IT-Muscle!

Sofern es von jeder Datei nur ein Exemplar gibt, kannst Du das für einen Ordner etwa so versuchen:
set "Druckdatei="  
for /f "delims=" %%f in ('dir /s /b "G:\%druck%"') do set "Druckdatei=%%f"  
if not defined Druckdatei goto :Error
set "druck=%Druckdatei%"  
Wenn es um die Unterordner von 3 verschiedenen Ordnern geht, dann noch eine weitere Schleife:
set "Druckdatei="  
for %%i in ("G:\Ordner1" "G:\Ordner2" "G:\Ordner3") do if not defined Druckdatei for /f "delims=" %%f in ('dir /s /b "%%~i"') do set "Druckdatei=%%f"  
if not defined Druckdatei goto :Error
set "druck=%Druckdatei%"  
Beiden Varianten sind als Ersatz der Zeilen 43 und 44 gedacht.

Grüße
bastla
IT-Muscle
IT-Muscle 28.10.2009 um 14:25:04 Uhr
Goto Top
hello face-smile

das mit der Dateisuche klappte mit meinem Ansatz, aber deiner sieht auch gut aus face-smile.. hab die Variante A von Dir übernommen! Trotzdem bekam ich keinen Druck raus! Nun ist mir aber in "75" und "81" ein Fehler!?! aufgefallen.. den ich berichtigt habe!.. Danach druckt er zwar, aber aus irgendeinem Grund gibt er aus "Gerät ist nicht bereit" 0 Dateien kopiert und das in einer Endlosschleife!... also er druckt dann auch solange bis man ihn mit CTRL+C killt face-smile.. irgendwo muss da noch ein fehler in der For-Schleife stecken, aber ich seh ihn einfach nich face-sad

VORHER

74.                           :Thi1  
75.          			for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt1>nul   
76.    			echo Befehl erfolgreich ausgefuehrt.  
77.				echo.  
78.				goto :MENU  
79.
80.				:Thi2  
81.				for /L %%d IN (1,1,%anzahl%) DO copy "%druck%" lpt2>nul    
82.				echo Befehl erfolgreich ausgefuehrt.  
83.				echo.  
84.				goto :MENU 

NACHER

                                :Thi1 
				for /L %%d IN ("1" "1" "%anzahl%") DO copy "%druck%" lpt1>nul  
				echo Befehl erfolgreich ausgefuehrt. 
				echo. 
				goto :ENDE

				:Thi2 
				for /L %%d IN ("1" "1" "%anzahl%") DO copy "%druck%" lpt2>nul   
				echo Befehl erfolgreich ausgefuehrt. 
				echo. 
				goto :ENDE 
bastla
bastla 28.10.2009 um 14:59:53 Uhr
Goto Top
Hallo ITMuscle!

Die Endlosschleife resultiert aus Deiner "Fehlerkorrektur" (durch die Verwendung der Anführungszeichen werden die Zahlenwerte als Text interpretiert).

Weshalb der Drucker "nicht bereit" ist, musst Du allerdings selbst herausfinden ...

Grüße
bastla

P.S.: Irgendwie kann ich mir nicht vorstellen, dass mit
for %%f In (G:\"%druck%" G:\"%druck%")
eine Datei in einem Unterordner gefunden wird ...
IT-Muscle
IT-Muscle 28.10.2009 um 15:25:32 Uhr
Goto Top
Hey,

naja mit der anderen Vorschleife hats halt auch funktioniert face-smile.. ist aber auch egal.. der Drucker ("das Gerät") ist ja bereit... deshalb ist es verwunderlich, dass er sagt Gerät nicht bereit 0 Dateien kopiert, aber dann trotzdem die Endlosschleife produziert?! Ich dachte in einer for-schleife mit /L muss man immer "" in den Klammern setzen?.. ok wieder was gelernt, aber seltsamerweise tut er wenn ich es ohne "" mache ja überhaupt nichts.. außer das die schleife durchlaufen wird, er das echo korrekt ausgibt, aber nichts an den Drucker sendet
bastla
bastla 28.10.2009 um 15:45:32 Uhr
Goto Top
Hallo ITMuscle!

Nur ganz kurz: Wie ein "for /l" zu schreiben ist, kannst Du mit "for /?" in der Online-Hilfe nachlesen.

"Überhaupt nichts" macht die Schleife dann, wenn %anzahl% einen Wert <1, einen Text oder gar nix enthält - dazu einfach einmal das "echo off" in ein "echo on" ändern und den Batch von der Kommandozeile starten - so siehst Du, wie die jeweiligen Befehle zum Zeitpunkt der Ausführung aussehen.

Grüße
bastla
IT-Muscle
IT-Muscle 29.10.2009 um 08:21:40 Uhr
Goto Top
Zitat von @bastla:
Hallo ITMuscle!

Nur ganz kurz: Wie ein "for /l" zu schreiben ist,
kannst Du mit "for /?" in der Online-Hilfe nachlesen.


das weiß ich und nutze es auch face-smile

"Überhaupt nichts" macht die Schleife dann, wenn
%anzahl% einen Wert <1, einen Text oder gar nix enthält - dazu
einfach einmal das "echo off" in ein "echoon" ändern und den Batch von der Kommandozeile starten -
so siehst Du, wie die jeweiligen Befehle zum Zeitpunkt der
Ausführung aussehen.

auch dies war mir bewusst.. trotzdem versteh ich nicht, dass die Batchdatei dieses Symptom aufweist.. also sehr seltsam das Ganze.. mir ist zwar von Anfang an bewusst, dass BATCH-Dateien nicht für komplexe Dinge zu gebrauchen sind, aber ich denke nicht, dass meins etwas sehr komplexes ist! face-smile vielleicht liegts auch nicht an der unteren Schleife sondern an der Schleife bei :Anzahl.. ich muss dem ganzen jetzt mal in den nächsten Tagen auf den Grund gehen.. wenn du oder jemand anderes eine Lösung allerdings inzwischen finden, bitte posten!

ansonsten vielen Dank nochmal und ich werde schauen, ob ich sie nicht zur gewünschten Funktionalität bewegen kann face-smile

grüße
bastla
bastla 29.10.2009 um 08:57:32 Uhr
Goto Top
Hallo ITMuscle!
Nur ganz kurz: Wie ein "for /l" zu schreiben ist,
kannst Du mit "for /?" in der Online-Hilfe nachlesen.
das weiß ich und nutze es auch face-smile
Ich hatte mich nur gewundert, woher Du die Schreibweise mit Anführungszeichen für die einzelnen Zahlenwerte hattest ...

Grüße
bastla
IT-Muscle
IT-Muscle 29.10.2009 um 09:40:36 Uhr
Goto Top
achso... die Schreibweise hab ich von ner Internetseite!.. da stand, dass bei "for" immer die Anführungszeichen in der Klammer zu setzen sind!..
IT-Muscle
IT-Muscle 12.11.2009 um 08:02:07 Uhr
Goto Top
Zitat von @bastla:
Hallo ITMuscle!
>> Nur ganz kurz: Wie ein "for /l" zu schreiben ist,
>> kannst Du mit "for /?" in der Online-Hilfe
nachlesen.
> das weiß ich und nutze es auch face-smile
Ich hatte mich nur gewundert, woher Du die Schreibweise mit
Anführungszeichen für die einzelnen Zahlenwerte hattest ...

Grüße
bastla

habs jetzt gelöst.. es geht ohne Anführungszeichen und anstatt copy mit "print /d:lpt1" ... mein Kollege sagte mir das der Spezialdrucker den Copy-Befehl bräuchte, dem war dann scheinbar aber doch nicht so face-smile.. EGAL.. Problem erkannt, Problem gebannt!..

wenn ich jetzt noch ne Lösung finde, dass er mir Computerdeckend sucht und nicht nur in g:\ dann wäre das göttlich, denn dann kann ich das Tool Abteilungsübergreifend nutzen!

gruß