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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 48944
Url: https://administrator.de/contentid/48944
Ausgedruckt am: 14.11.2024 um 15:11 Uhr
20 Kommentare
Neuester Kommentar
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
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
Moin Bader,
...und falls Du noch keine Einzeiler-Lösung hinbekommen hast, hier eine mittellange Lösung mit VBSkript:
Aufruf des Skriptchens aus einem Batch heraus (Beispiel):
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]
...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]
Moin Bader,
Rückfragen:
*pfffffff....Reagier ich gar nicht drauf..
Gruß
Biber
Rückfragen:
... Bekomm die ganze Sache nur leider nicht zum laufen
Könntest Du es eine Winzigkeit detaillierter beschreiben oder soll ich lieber raten? 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
@Biber
Muss man das wirklich mit diesem neumodischen Zeug machen - da reichen doch ein paar Zeilen Batch ...
Grüße
bastla
Muss man das wirklich mit diesem neumodischen Zeug machen - da reichen doch ein paar Zeilen Batch ...
@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
@bastla
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
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
@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):
Verwendung:
HTH
bastla
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
- 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
@bastla
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
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
Danke für die Rückmeldung, Bader,
aber hier muss ich noch mal nachfragen:
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
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
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)
Wenn Du mehrere *.doc-Dateien drucken willst, dann kannst Du es in eine For-Schleife packen.
...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
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
@Biber
... könnte mir nie passieren (und schon überhaupt nicht bei "Bit-HerumWerf-Decodier-Scripts")
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
... könnte mir nie passieren (und schon überhaupt nicht bei "Bit-HerumWerf-Decodier-Scripts")
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