Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоустановка принтера этикеток. Логика определения USB порта

Ответить
Настройки темы
CMD/BAT - Автоустановка принтера этикеток. Логика определения USB порта

Новый участник


Сообщения: 9
Благодарности: 4

Профиль | Отправить PM | Цитировать


Добрый день! Долго пытался напрягать все извилины, чтобы научиться писать скриптики. Что-то получилось, а что-то нет.
Прошу помочь добить логику скрипта, который помогает юзеру установить драйвер принтера на правильный юсб порт.
Все действия старался описать в комментариях. Знаю, что в первом же 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
Благодарности: 4

Профиль | Отправить PM | Цитировать


Какой вопрос задал - такой ответ и получил.
Прошу помочь попунктно:
1) Имеем цикл
Код: Выделить весь код
for /f "skip=1 tokens=*" %%p in ('wmic PRINTER where "PortName like 'USB%'" Get DeviceID') DO echo.%%p>>%CurrentPath%\PrintList.txt
Получаем файл 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



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Автоустановка принтера этикеток. Логика определения USB порта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Службы - 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




 
Переход