|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоустановка принтера этикеток. Логика определения USB порта |
|
CMD/BAT - Автоустановка принтера этикеток. Логика определения USB порта
|
Новый участник Сообщения: 9 |
Добрый день! Долго пытался напрягать все извилины, чтобы научиться писать скриптики. Что-то получилось, а что-то нет.
Прошу помочь добить логику скрипта, который помогает юзеру установить драйвер принтера на правильный юсб порт. Все действия старался описать в комментариях. Знаю, что в первом же IF у меня написана чушь. Не знаю как это реализовать. Прошу, по возможности, помочь. Спасибо echo off &chcp 866 >nul set "CurrentPath=%~dp0" @echo Установка драйвера принтера с именем Zebra rem Получаю список имён принтеров в системе, использующие USB порты for /f "skip=1 tokens=*" %%p in ('wmic PRINTER where "PortName like 'USB%'" Get DeviceID') DO echo.%%p>>%CurrentPath%\PrintList.txt findstr /vrc:"^$" %CurrentPath%\PrintList.txt for /f "delims=" %%b in ('%CurrentPath%\PrintList.txt') DO Set PrintNames=%%p rem Если один из двух типов принтеров уже установлен в системе, переименовать его в Zebra rem Если в PrintList.txt есть лишь одна строка, содержащая TSC TDP-225, то if /i "TSC TDP-225" EQU 1 ( rem Переименовываю принтер rundll32 printui.dll,PrintUIEntry /Xs /n "%PrintNames%" PrinterName "Zebra" rem Добавляю драйвер ZDesigner в систему rundll32 printui.dll,PrintUIEntry /ia /f "ZBRN.inf" /m "ZDesigner LP 2824 Plus (ZPL)" rem Заменяю текущий драйвер на ZDesigner rundll32 printui.dll,PrintUIEntry /Xs /n "TSC TDP-225" DriverName "ZDesigner LP 2824 Plus (ZPL)" rem Если в PrintList.txt есть лишь одна строка, содержащая ZDesigner, то if /i "ZDesigner" EQU 1 ( rem Переименовываю принтер rundll32 printui.dll,PrintUIEntry /Xs /n "%PrintNames%" PrinterName "Zebra" ) ) Else ( rem Устанавливаю драйвер принтера с именем Zebra на порт USB001 rundll32 printui.dll,PrintUIEntry /if /b "Zebra" /f "%CurrentPath%\ZBRN\ZBRN.inf" /m "ZDesigner LP 2824 Plus (ZPL)" /r "USB001" rem Посылаю задание пробной печати в очередь печати rundll32 printui.dll,PrintUIEntry /k /n "Zebra" rem Логика определения правильного порта предполагает выбор верного решения оператором методом перебора, т.к. в системе может быть несколько USB поров rem причем не обязательно, чтобы они шли по-порядку, вроде USB001, USB002 и т.д. rem Определяю, требуется ли вмешательство оператора: для каждого значения строки, содержащей USB, в списке портов принтеров, где портом является USB, задать переменную USBPorts for /f %%u in ('wmic PRINTER where "PortName like 'USB%'" Get PortName | FindStr /I /M USB' DO Set USBPorts=%%u rem Если строк больше чем 1, то выполнить цикл с поочередной подстановкой каждого из значений переменной в команду (если в команду подставить текущий назначенный порт, то ошибки не будет) if /i "%USBPorts%" GTR 1 ( rem Вывожу сообщение с инструкцией для пользователя mshta.exe vbscript:Execute^("msgbox ""Принтер распечатал тестовую этикетку?""& VbCrLf & VbCrLf &""Если ДА, нажмите кнопку Y в черном окне""& VbCrLf & VbCrLf &""Если НЕТ, нажмите кнопку N в черном окне"",vbexclamation,""ВНИМАНИЕ! Требуется выбор действия"":close"^) pause>nul rem Блок выбора с двумя вариантами сценария Choice if %errorlevel%==-1 goto :error call :%errorlevel% goto :EndChoice rem Если распечаталась, выхожу из цикла :1 @echo Принтер установлен goto :EndChoice exit /b rem Если не распечаталось, то подставляю следующее значение из переменной и меняю порт принтера :2 @echo timeout /T 10 rundll32 printui.dll,PrintUIEntry /Xs /n "Zebra" PortName "%USBPorts%" exit /b :error mshta.exe vbscript:Execute^("msgbox ""Принтер был установлен в систему, но при попытке настройки произошла неизвестная ошибка""& VbCrLf & VbCrLf &""Свяжитесь с технической поддержкой"",vbexclamation,""Ошибка установки драйвера принтера"":close"^) :EndChoice ) ) ) |
|
Отправлено: 22:40, 22-07-2020 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать Какой вопрос задал - такой ответ и получил.
Прошу помочь попунктно: 1) Имеем цикл for /f "skip=1 tokens=*" %%p in ('wmic PRINTER where "PortName like 'USB%'" Get DeviceID') DO echo.%%p>>%CurrentPath%\PrintList.txt Скрытый текст
Printer VendorName1 Printer VendorName2 Printer VendorName3 \\192.168.1.10\SharedPrinter1 Далее хочу задать значение каждой строки целиком в качестве переменной и обработать следующим образом: Если в текстовом файле имеется только одна строка, содержащая "Printer VendorName1", то выполнить команду 1 Если в текстовом файле имеется только одна строка, содержащая Printer VendorName2, то выполнить ряд команд 2 3 4 Как это вижу я: for /f "delims=" %%b in ('%CurrentPath%\PrintList.txt') DO Set PrintNames=%%b if /i "%PrintNames%"=="Printer VendorName1" (@if /i "%b" EQU 1 ( rundll32 printui.dll,PrintUIEntry /ia /f "driver.inf" /m "DriverModelName" rundll32 printui.dll,PrintUIEntry /Xs /n "Printer VendorName1" DriverName "DriverModelName" rem Переименовываю принтер rundll32 printui.dll,PrintUIEntry /Xs /n "%PrintNames%" PrinterName "CurentPrinter" @echo Успех ) if /i "%b"=="Printer VendorName2" (@if /i "%b" EQU 1 ( rundll32 printui.dll,PrintUIEntry /Xs /n "Printer VendorName2" DriverName "DriverModelName" @echo Успех ) Else (.... |
Отправлено: 22:45, 28-08-2020 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Службы - USB001. В настройках принтера нет USB порта. Как исправить? | smit1987 | Microsoft Windows 7 | 2 | 20-03-2020 07:14 | |
Прочее - Как реализовать перезагрузку 4g USB модем без физического извлечения из порта USB | h8w8 | Сетевые технологии | 2 | 13-09-2018 18:22 | |
CMD/BAT - [решено] добавление usb порта для принтера | WeNDiGO | Скриптовые языки администрирования Windows | 16 | 21-11-2016 07:00 | |
Раздача TCP\IP принтера, порта и драйвера средствами GPO | woolf-234 | Windows Server 2008/2008 R2 | 14 | 23-12-2013 18:20 | |
Доступ - [решено] Добавление tcp порта принтера | xperson | Microsoft Windows 2000/XP | 2 | 25-05-2010 21:40 |
|