1

У меня есть следующий сценарий:

У меня есть локальный принтер, подключенный к ПК с Windows 8.1, и я хочу напечатать несколько документов (файлы с расширениями .txt, .pdf и .doc) из командной строки.

Я попытался использовать команду печати, задокументированную здесь. Тем не менее, это не работает. Я не получаю печатных материалов и появляется сообщение об ошибке:

"Невозможно инициализировать DeviceName устройства"

Неважно, если я укажу порт, к которому подключен принтер, или имя ПК, а затем имя принтера.

Эта команда все еще поддерживается в Windows 8.1? Как я могу решить эту проблему?

2 ответа2

2

Вот способ сделать это с 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
2

Команда PRINT.COM работает только с текстовыми файлами. Он напечатает все, что является чистым текстом, например.ТЕКСТ, .INI,.Летучая мышь и др.

Если ваша программа поддерживает печать в файл, вы можете использовать команду PRINT.COM для отправки этих файлов на ваш принтер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .