hannibal
Goto Top

Word Document durch Batch drucken

Hallo,

ist es möglich durch eine Batch ein Word Document zu drucken.
Es ist immer nur eine Datei in dem Verzeichnis und sie liegt immer auf "A:\" also auf Diskette.
Das nächste Problem ist das die Datei immer einen anderen Namen hat also "*.doc"
Ich hatte mir das so vorgestellt das die Datei mit Doppelklick auf die Batch gedruckt wird, es wär natürlich dann auch noch schön wenn sich das Document danach wieder schließt, was aber nicht so wichtig wäre.
Der Druckername is "hp psc 1310 series"

Ich wäre um eine Hilfe sehr dankbar

mfg
Dominik Bader

Content-ID: 48944

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

Ausgedruckt am: 14.11.2024 um 15:11 Uhr

Mitchell
Mitchell 16.01.2007 um 14:33:57 Uhr
Goto Top
korrigiert mich bitte, wenn ich da falsch liege (biber!!!^^), aber wie wär's denn mit folgdendem Ansatz:

print A:/mein_verzeichnis/*.doc

Mfg

Mitchell
Kosh
Kosh 16.01.2007 um 14:41:30 Uhr
Goto Top
dann schiebt er die datei aber am LPT1 Port raus.

wenn dann

print /D:"Druckername" *.doc
Biber
Biber 16.01.2007 um 14:56:55 Uhr
Goto Top
Hmm,

normalerweise sollte unter HKEY_CLASSES_ROOT\Word.Document.8\shell\Print\command stehen, was passiert, wenn der Benutzer im Explorer bei einem Word-Dokoment "Drucken" anklickt.

Das ist dann meist etwas wie

"C:\Programme\Microsoft Office\OFFICE11\WINWORD.EXE" /x /n /dde

Damit (+den Dateinamen als Parameter) würde ich zuerst experimentieren.
Der Print-Befehl kann zwar drucken, aber nichts spezifisch formatiertes wie *.doc, *.pdf oder *.xls, sondern nur Plain-Text (so was wie meine Oneliner z.B.).

Für alles andere muss schon die entsprechende Applikation genutzt werden IMHO.

Gruß
Biber
Hannibal
Hannibal 16.01.2007 um 16:38:33 Uhr
Goto Top
Ich möchte mich erst mal bei allen bedanken hätte nicht gedacht, dass ich so schnell eine Antwort bekomme. Hab mich sehr darüber gefreut!

Erst mal an Mitchell und Kosh so hab ichs am Anfang auch probiert aber habe dann festgestellt, wie biber scho sagte, dass der Befehl print nur für z.B. txt-Datein funktioniert aber trotzdem herzlichen Dank für die Mühe.

Dann an biber vielen Dank werde es jetzt mal so probieren vielleicht bekomm ichs ja so hin.Bis jetzt macht er zwar das richtige Document auf aber startet denn Druckbefehl nicht. Naja mal schaun, wenn ichs nicht hinbekomme rühr ich mich einfach nochmal.

mfg
Dominik
Biber
Biber 16.01.2007 um 19:57:30 Uhr
Goto Top
Moin Bader,

...und falls Du noch keine Einzeiler-Lösung hinbekommen hast, hier eine mittellange Lösung mit VBSkript:

' -----------------snipp PrintADoc.vbs Biber 2007  
If WScript.Arguments.Count < 1 Then
	WScript.Echo("Syntax: PrintADoc.vbs Worddatei.doc [Druckername]" )  
	WScript.Quit
End If

strFile = WScript.Arguments(0)

Set objWord = WScript.CreateObject("Word.Application")  
' If WScript.Arguments.Count = 1 Then ' Bug in der ur-Version, s. [Edit]  
If WScript.Arguments.Count > 1 Then
   objWord.ActivePrinter = Wscript.Arguments(1)
end if   
objWord.Documents.Open strFile
objWord.ActiveDocument.PrintOut

Wscript.Sleep(0815)

objWord.ActiveDocument.Close
objWord.Quit
' -----------------snapp PrintADoc.  

Aufruf des Skriptchens aus einem Batch heraus (Beispiel):
cscript //nologo f:\VBS_Beispiele\PrintADoc.vbs "f:\jokes\StoibersGedichte.doc" 

Nicht nobelpreisverdächtig, aber bis Du etwas Vernünftigeres hast...

Grüße
Biber


[Edit 5.11.2009 ]
Der HEUTE im Skript Vers. 001 korrigierte Bug "WScript.Arguments.Count = 1" statt "...>1" ist zwar weiter unten erwähnt,
aber da er offensichtlich überlesen werden kann--> Bugfix nachgezogen. [/Edit]
Hannibal
Hannibal 17.01.2007 um 20:43:54 Uhr
Goto Top
Hallo Biber,
ja ist auch ne super Idee das ganze mit nem VBSkript zu machen. Bekomm die ganze Sache nur leider nicht zum laufen face-sad

Noch so nebenbei vielleicht kann mir ja da auch noch jemand weiterhelfen.
Hab hier auch noch ein VBSkript das mir die Datein auflistet die in einem Ordner sind und im Editor aufmacht.
Hätte aber gern auch noch die Datein der ganzen Unterordner dabei.
Hier das Skript:
Dim WshShell, FSO, oFol, Arg, s2, oFils, oExec

Set FSO = CreateObject("Scripting.FileSystemObject")
Arg = WScript.Arguments(0)
If FSO.FolderExists(Arg) = False Then
MsgBox "Bitte Ordner mit der Maus draufziehen um Inhalt zu sehen!", 64
Set FSO = Nothing
WScript.Quit
End If

Set oFol = FSO.GetFolder( Arg )

Set oFils = oFol.Files
For Each oFil in oFils
s2 = s2 & oFil.Name & VBCrLf

WriteToFile
Next

Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("notepad" + " " + oFol.Path + "\liste.txt")

Function WriteToFile
Const ForReading = 1, ForWriting = 2
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(oFol.Path + "\liste.txt", ForWriting, True)
f.Write s2
End Function

mfg
Dominik
Biber
Biber 17.01.2007 um 21:43:56 Uhr
Goto Top
Moin Bader,

Rückfragen:
... Bekomm die ganze Sache nur leider nicht zum laufen
Könntest Du es eine Winzigkeit detaillierter beschreiben oder soll ich lieber raten? face-wink
Hätte aber gern auch noch die Datein der ganzen Unterordner dabei.
WTF hat das mit "Word-Document durch Batch drucken" zu tun bzw. wer soll das jemals unter diesem Titel wiederfinden?
*pfffffff....Reagier ich gar nicht drauf..
Hätte aber gern auch noch die Datein der ganzen Unterordner dabei.
Meinst Du so in dieser Richtung?
'----------Snipp GetFolderList.vbs  
Const ForReading = 1, ForWriting = 2, BiberComment = "Just kidding 2007"  
Dim WshShell, FSO, oFol, Arg, s2, oFils, oExec
Set FSO = CreateObject("Scripting.FileSystemObject")  
Arg = WScript.Arguments(0)
If FSO.FolderExists(Arg) = False Then
   MsgBox "Bitte Ordner mit der Maus draufziehen um Inhalt zu sehen!", 64  
   Set FSO = Nothing
   WScript.Quit
End If

Set oFol = FSO.GetFolder( Arg )
FriemelAbFolder oFol
Set f = fso.OpenTextFile(oFol.Path + "\liste.txt", ForWriting, True)  
f.Write s2
f.close
Set FSO = nothing
Set WshShell = CreateObject("WScript.Shell")  
Set oExec = WshShell.Exec("notepad" + " " + oFol.Path + "\liste.txt")  
WScript.Quit

'--------Wird für den Arg(0)-Ordner und damit implizit auch je SubFolder aufgerufen.  
Sub FriemelAbFolder(oF)
Dim oSubFolders
Set oFils = oF.Files
For Each oFil in oFils 
   s2 = s2 & oFil.Path & vbCRLF
Next
Set oSubfolders= oF.Subfolders
   For Each subF in oSubfolders
      FriemelAbFolder subF
   Next
End Sub 

Gruß
Biber
bastla
bastla 18.01.2007 um 00:43:49 Uhr
Goto Top
@Biber
Muss man das wirklich mit diesem neumodischen Zeug machen - da reichen doch ein paar Zeilen Batch ... face-wink face-smile
@echo off
if [%1]== goto :Instructions
if not exist "%1\" goto :Instructions  
chcp 1252 > nul
del "%1\liste.txt" 2> nul  
for /f "delims=" %%i in ('dir "%1" /s /b /a-d') do echo %%~nxi >> "%1\liste.txt"  
start notepad "%1\liste.txt"  
goto :eof
:Instructions
color 4e & title Kein Ordner zum Anzeigen!
echo Bitte Ordner mit der Maus draufziehen um Inhalt zu sehen! & (echo. ) & pause

Grüße
bastla
Biber
Biber 18.01.2007 um 18:02:13 Uhr
Goto Top
@bastla
Muss man das wirklich mit diesem neumodischen Zeug machen ..?
Meine Therapeutin hat mir gesagt, ich müsste viel offener und toleranter werden...

Klar ginge das auch noch billiger, aber ob Du es nun per Batch, VBS, KiX oder COBOL umsetzt - es ist ja vom Design her so oder so für die Tonne.

Erstens kann ich damit nur eine Dateiliste von Verzeichnissen erzeugen, in denen ich auch Schreibrechte habe.
Weil ja diese Liste.txt immer direkt im (jeweils aufgerufenen relativen) Root-Verzeichnis angelegt wird.
Bei CDs, Netzlaufwerken oder randvollen Disketten, USB-Sticks oder USB-Kameras wird das wohl etwas abgrätschen.
Da würde ich lieber diese Liste in das %temp%\Verzeichnis schreiben.
Zweitens wird diese Liste.txt hinterher nicht gelöscht.
Wenn dieser Schnipsel also mal in der Computer-Bild veröffentlicht und von den Usern in unseren Domänen ausprobiert wird, dann habe ich innerhalb von 2 Tagen auf den Netzlaufwerken ca. 3 GigaByte Volumen nur für Liste.txt-Dateien.
Drittens bringen mich weder diese irgendwo gefundenen und geflickten VBS-Trümmer noch der Batch-Schnipsel bei der eigentlichen Frage weiter, wie ich so ein doofes Word-Dokument aus dem CMD-Environment drucken kann.

Und dann sacht er noch "..Bekomm die ganze Sache nur leider nicht zum laufen"...

Ich hätte doch besser Bäcker werden sollen...

Grüße
Biber
bastla
bastla 18.01.2007 um 20:05:27 Uhr
Goto Top
@Biber

Da hab ich wohl nicht den richtigen Tag erwischt, um Dich ein wenig zu necken - zumindest ich fand aber unseren "Rollentausch" in der Verwendung von Batch / VBS lustig (jedenfalls um 00:43:49 Uhr).

Die Batch-Variante selbst ist natürlich nur der (ursprünglichen) Script-Lösung nachgekaspert - mit allen Einschränkungen / Designschwächen, die Du genannt hast.

@bader

Ein weiterer Versuch (nicht auf Grundlage Deines ausführlichen Feedbacks zur oben angebotenen Lösung entstanden):
'PrintAllDocs.vbs  
sSourceFolder = "A:\"  
If WScript.Arguments.Count > 0 Then
	sSourceFolder = WScript.Arguments(0)
End If
Set fso = CreateObject("Scripting.FileSystemObject")  
If Not fso.FolderExists(sSourceFolder) Then
	WScript.Echo "Ordner " & sSourceFolder & " nicht verfügbar!"  
	WScript.Quit(2)
Else
	bPrintetd = False
	Set oShellApp = WScript.CreateObject("Shell.Application")  
	For Each oFile In fso.GetFolder(sSourceFolder).Files
		If InstrRev(oFile.Name, ".") Then  
			If LCase(Mid(oFile.Name, InstrRev(oFile.Name, "."))) = ".doc" Then  
				oShellApp.ShellExecute oFile.Path, "", "", "print", 0  
				bPrinted = True
				WScript.Sleep(5180)
			End If
		End If
	Next
	Set oShellApp = Nothing
	If Not bPrinted Then
		WScript.Echo "Kein Dokument zum Drucken gefunden!"  
		WScript.Quit(1)
	End If
End If
Verwendung:
  • Code als PrintAllDocs.vbs in C:\Programme speichern,
  • Verknüpfung auf Desktop erstellen,
  • Verknüpfung doppelklicken, um alle auf Diskette (A:\) gespeicherten .doc-Dateien zu drucken, oder

  • anderen Ordner auf Verknüpfung ziehen, um alle in anderem Ordner gespeicherten .doc-Dateien zu drucken, oder

  • Aufruf von der Kommandozeile mit
CScript //nologo "C:\Programme\PrintAllDocs.vbs" "X:\Beispiel\für einen\Ordnerpfad" 

HTH
bastla
Biber
Biber 18.01.2007 um 22:41:41 Uhr
Goto Top
@bastla
Da hab ich wohl nicht den richtigen Tag erwischt...
Doch, schon okay... ich fand es ja auch lustig mit dem Rollentausch.

Ich war ja nur ein wenig angefressen, weil ich eigentlich unter einer ganz anderen Fragestellung hier in den Thread eingestiegen war... die dann anscheinend doch ganz spontan zugunsten einer anderen, die ja auch irgendwie mit Computern zu tun hat, aufgegeben wurde.

Wahrscheinlich kamen da Erinnerungen an meine Ex-Schwiegermutter hoch.
Die hat auch immer -unabhängig von meinen Antworten auf irgendwelche Fragen- immer gesagt "Ja." und dann unvermittelt bei vollkommen anderen Themen weitererzählt.

Aber was erzähl ich hier, dafür hab ich doch meine blutjungen rothaarigen Therapeutinnen...

Grüße
Biber
Hannibal
Hannibal 19.01.2007 um 14:33:02 Uhr
Goto Top
Vielen Dank,
das VBSkript zum Drucken funktioniert genauso wie ich mir das ganze vorgestellt habe.
Das Skript für die Auflistung der Datein funktioniert nach ein wenig umändern auch so wie ich das wollte (sollte nämlich nur die Dateinamen auflisten ohne Pfad).

Sry, dass ich einfach so mit einem ganz andren Thema angefangen habe aber ist bei mir so ein Problem, dass ich nicht lange beim selben Thema bleiben kann, soll aber nicht heißen, dass das erste Thema scho für mich abgschlossen war.
Hätte vielleicht einfach einen neuen Beitrag verfassen sollen wäre wahrscheinlich sinnvoller gewesen.
Trotzdem vielen Dank und sry, dass ich mich erst jetzt wieder melde, die Woche war etwas stressig.

Auch ein schönes Wochenende

Dominik
Biber
Biber 19.01.2007 um 16:29:54 Uhr
Goto Top
Danke für die Rückmeldung, Bader,

aber hier muss ich noch mal nachfragen:

das VBSkript zum Drucken funktioniert genauso wie ich mir das ganze vorgestellt habe

Ich vermute, Du meinst jetzt das Skript von bastla.
Kann Du nochmal kurz was zu dem Problem mit dem ersten, PrintADoc.vbs, sagen bitte.
Gab es da eine Fehlermeldung oder gar keine sichtbare Reaktion?

Schönes Wochenende

Biber
Hannibal
Hannibal 19.01.2007 um 18:18:55 Uhr
Goto Top
Das Skript bringt immer nur das Echo, also die Box mit "Syntax: PrintADoc.vbs Worddatei.doc [Druckername]".
Ich weiß nicht wie ich denn Pfad und *.doc mitgeben soll.

mfg
Dominik
Biber
Biber 19.01.2007 um 18:39:28 Uhr
Goto Top
Moin Bader,

Du kannst einem VBS-Skript auf mehrere Arten einen Parameter mitgeben.

Wenn Du über den Explorer mit der Maus ein Worddokument auf das VBS-Skript ziehst, sollte es ebenso klappen wie aus den Batch heraus mit (siehe oben)
::--irgendwo in einem Batch
...
cscript //nologo f:\VBS_Beispiele\PrintADoc.vbs "f:\jokes\StoibersGedichte.doc"  
...
----- oder genauso von CMD-Prompt aus.

1) "cscript //nologo " ----> das musst auch Du schreiben  
2)......."f:\VBS_Beispiele\PrintADoc.vbs" --->ist der Pfad zu meinem Skript.   
Du hast es vielleicht unter "C:\Windows" gespeichert und vielleicht als Word-Drucken.vbs  
Dann eben "C:\windows\Word-Drucken.vbs"  
3) und dann der Pfad und Name der *.doc-Datei

Wenn Du mehrere *.doc-Dateien drucken willst, dann kannst Du es in eine For-Schleife packen.
for %i in (Rechnung2006*.doc) do Cscript //nologo Word-Drucken.vbs "%i"  
-oder, Dein Eröffnungsbeispiel in einem Batch, also mit 2 %-Zeichen vor der Zählvariablen -
if exist A:\*.doc for %%i in (A:\*.doc) do Cscript //nologo Word-Drucken.vbs "%%i"  

...aber gedacht ist es schon für den gezielten Druck einzelner Word-Docs.

Der zweite, optionale Parameter [Druckername] kann, aber muss nicht angegeben werden.
Wenn Du den nicht eingibst, wird der Windows-Standarddrucker genommen.

HTH Biber
Hannibal
Hannibal 19.01.2007 um 19:43:14 Uhr
Goto Top
Sers Biber,

ah ich hab immer versucht die Parameter mit in das VBS mit einzubaun ist mir aber nicht gelungen.
Aber jetzt kommt der Fehler wenn ich einen Ordner draufziehe

Zeile: 10
Zeichen: 1
Fehler: Index außerhalb des gültigen Bereichs
Code: 800A0009
Quelle: Laufzeitfehler in Microsoft VBScript

Im Cmd bringt er so ziemlich das selbe.

mfg
Dominik
bastla
bastla 19.01.2007 um 19:48:05 Uhr
Goto Top
Hallo Dominik!

Ersetze in der Zeile
If WScript.Arguments.Count = 1 Then
das "=" durch ein ">".

Grüße
bastla
Biber
Biber 19.01.2007 um 20:03:59 Uhr
Goto Top
Thx bastla,

oder durch
If WScript.Arguments.Count = 2 Then
....

Wieso ich den wieder übersehen habe...*tztz

Schönes und baldiges Wochenende
Biber
bastla
bastla 19.01.2007 um 20:12:17 Uhr
Goto Top
@Biber

... könnte mir nie passieren (und schon überhaupt nicht bei "Bit-HerumWerf-Decodier-Scripts") face-big-smile

Ich hab' ja Verständnis dafür, dass seinerzeit noch jedes Byte Speicher nutzbringend ausgefruchtet werden musste und die Offsets / Indizes eben nullbasiert verwendet wurden, aber dass man/frau/kind sich heute noch damit herumschlagen muss ...

Schönes Wochenende
bastla
Hannibal
Hannibal 20.01.2007 um 16:40:27 Uhr
Goto Top
Hallo zusammen,
habs geändert, bloß leider kommt immer noch der selbe fehler habs mit beiden Änderugen versucht. Hab auch beide Möglichkeiten also übers CMD starten und mit Ordner direkt drauf ziehnversucht.
Aber zum Glück hab ja ich scho eine Lösung die super funktioniert mit der ich arbeiten kann. face-smile


mfg
Dominik Bader