Вот способ сделать это с VBScript. Основано на ответе, предоставленном Jobbo.
Уловка в том, что вы должны зарегистрировать программу в качестве обработчика по умолчанию. Другими словами, если вы просто вводите имя файла из командной строки, он должен открыться в соответствующей программе. Например, если вы передаете аргумент «file.pdf», у вас должен быть установлен просмотрщик PDF. Если вы хотите распечатать документ Word, у вас должен быть установлен Word (я думаю, что программа просмотра должна работать, но я не проверял это).
Еще одна вещь, некоторые программы оставляют окно открытым (Adobe Acrobat Reader X) после печати документа. Вы можете добавить логику в скрипт, чтобы закрыть его, но я оставлю это на ваше усмотрение.
Чтобы использовать, введите cscript /nologo <name_of_script.vbs> <name_of_file_to_print>
где <name_of_script.vbs>
- это имя программы, в которой вы его сохраните, а <name_of_file_to_print>
- это имя файла, который вы хотите распечатать. Если путь содержит пробелы, заключите аргумент в кавычки.
Option Explicit
Dim shl, objFS
Dim fldr
Dim files,file
Dim file_to_print,wrk_folder
Set shl = CreateObject("Shell.Application")
Set objFS = CreateObject("Scripting.FileSystemObject")
if not wscript.Arguments.Count = 1 then
wscript.echo "Missing parameter!"
wscript.quit
end if
file_to_print = wscript.arguments(0)
file_to_print = objFS.GetAbsolutePathName(file_to_print)
wrk_folder = objFS.GetParentFolderName(file_to_print) & "\"
wscript.echo "Argument passed: " & wscript.arguments(0)
wscript.echo "Absolute file path: " & file_to_print
wscript.echo "Work folder: " & wrk_folder & vbcrlf
if objFS.FileExists(file_to_print) then
Set fldr = shl.Namespace(wrk_folder)
Set files = fldr.Items
For Each file in files
If LCase(file.Path) = LCase(file_to_print) Then
file.InvokeVerbEx("Print")
End If
Next
end if
Set shl = Nothing
Set fldr = Nothing
Set files = Nothing
Set objFS = Nothing
WScript.Quit