Показать полную графическую версию : [решено] Принтер по умолчанию по маске имени
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***" - не работает
Спасибо
всегда отрадно видеть любителей костылей, изобретающих велосипеды с треугольными, поперечными колёсами.
sigmatik
16-06-2014, 14:27
всегда отрадно видеть любителей костылей, изобретающих велосипеды с треугольными, поперечными колёсами. »
Есть проблема с определенным оборудованием в определенной конфигурации, описана например здесь http://toster.ru/q/100419
Решения нет. Костыли рассматриваются пока как единственно возможное решение.
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
могу предложить еще один вариант на powershell »
Вам надо там ещё обрабатывать ситуацию, когда не будет найдено ни одного подходящего принтера. Также не проверял, как будет се6я вести Ваш скрипт с несколькими подходящими под шаблон именами принтеров.
WSH:
« скрыть »
а как таймер выполнения отсрочить секунд на 30, скрипт отлично работает но принтер иногда подтягивается не сразу
если добавляю
WScript.Sleep 30000
Ошибка: предполагается наличие инструкции
Таймер задается в миллисекундах.
А так всё должно работать, возможно в Вашем сценарии используются какие-нибудь вложенные конструкции?
копипаста из сообщения
только строка с паттерном выглядит так
.Pattern = "\d{3,4}.*"
т.к. название принтеров начинается с трех или четырех цифр в зависимости от модели локального принтера/мфу или номера отдела из четырех цифр в сетевом варианте и дальше различные символы буквы цифры скобки описание
и верхняя строчка скрипта
WScript.Sleep 30000
в итоге ошибка предполагается наличие инструкции
строка 3
символ 1
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC