PDA

Показать полную графическую версию : [решено] Принтер по умолчанию по маске имени


sigmatik
16-06-2014, 13:43
Есть прекрасный, простой и вполне рабочий скрипт для установки определенного принтера в качестве используемого по-умолчанию, вот он:

rundll32 printui.dll,PrintUIEntry /y /n "Printer_name"

Задача: Модифицировать скрипт таким образом, чтобы в параметре Printer_name можно было задвать имя принтера по маске.
Пример:
Имя принтера "HP1320_buh (Перенаправлено 1)"
Нужно сделать так, чтобы по-умолчанию ставился принтер, первая часть названия которого совпадает с HP_1320_buh , то есть что то вроде "HP_1320_buh****"

rundll32 printui.dll,PrintUIEntry /y /n "HP_1320_buh***" - не работает

Спасибо

cameron
16-06-2014, 14:18
всегда отрадно видеть любителей костылей, изобретающих велосипеды с треугольными, поперечными колёсами.

sigmatik
16-06-2014, 14:27
всегда отрадно видеть любителей костылей, изобретающих велосипеды с треугольными, поперечными колёсами. »
Есть проблема с определенным оборудованием в определенной конфигурации, описана например здесь http://toster.ru/q/100419
Решения нет. Костыли рассматриваются пока как единственно возможное решение.

Iska
16-06-2014, 14:45
WSH:
Option Explicit

Dim i

Dim objRegExp
Dim objWshNetwork
Dim collWshCollection


Set objRegExp = WScript.CreateObject("VBScript.RegExp")

With objRegExp
.IgnoreCase = True
.Pattern = "HP_1320_buh.*"
End With

With WScript.CreateObject("WScript.Network")
Set collWshCollection = .EnumPrinterConnections()

For i = 0 To collWshCollection.Count - 1 Step 2
If objRegExp.Test(collWshCollection.Item(i + 1)) Then
.SetDefaultPrinter collWshCollection.Item(i + 1)

Exit For
End If
Next

Set collWshCollection = Nothing
End With

Set objRegExp = Nothing

WScript.Quit 0

Умолчальным будет сделан первый же подходящий по шаблону принтер.

sigmatik
16-06-2014, 15:19
WSH »
Спасибо , но скрипт не работает. Выполняется без ошибок, но поставленную задачу не решает, принтер по умолчанию не меняется :(

sigmatik
16-06-2014, 15:40
Спасибо , но скрипт не работает. Выполняется без ошибок, но поставленную задачу не решает, принтер по умолчанию не меняется »
Прошу прощения, в скрипте точку пропустил, все работает!. Спасибо.

P.S. а для соискателей могу предложить еще один вариант на powershell

$pr
$pr=get-WmiObject -class Win32_printer | where ({$_.name -like "reg1*"}) | foreach { $_.name }
rundll32 printui.dll,PrintUIEntry /y /n $pr

Iska
16-06-2014, 16:44
могу предложить еще один вариант на powershell »
Вам надо там ещё обрабатывать ситуацию, когда не будет найдено ни одного подходящего принтера. Также не проверял, как будет се6я вести Ваш скрипт с несколькими подходящими под шаблон именами принтеров.

julia
25-01-2022, 16:39
WSH:
« скрыть »
а как таймер выполнения отсрочить секунд на 30, скрипт отлично работает но принтер иногда подтягивается не сразу

если добавляю

WScript.Sleep 30000

Ошибка: предполагается наличие инструкции

NickM
25-01-2022, 18:37
Таймер задается в миллисекундах.
А так всё должно работать, возможно в Вашем сценарии используются какие-нибудь вложенные конструкции?

julia
26-01-2022, 10:09
копипаста из сообщения

только строка с паттерном выглядит так

.Pattern = "\d{3,4}.*"

т.к. название принтеров начинается с трех или четырех цифр в зависимости от модели локального принтера/мфу или номера отдела из четырех цифр в сетевом варианте и дальше различные символы буквы цифры скобки описание

и верхняя строчка скрипта

WScript.Sleep 30000

в итоге ошибка предполагается наличие инструкции
строка 3
символ 1




© OSzone.net 2001-2012