Суббота, 20 Май 2006 | (7806)
Делали мы как-то систему для Pocket PC, которая разрешала считывать заказы сканером штрихкода, обращаться через Wi-Fi к базе чтобы узнать информацию о товаре и распечатывать заявки на сетевых принтерах. Все хорошо, но чтобы запустить систему, надо было вводить информацию о сетевых принтерах в базу даных. Так как настройку надо было делать на компьютере где нет возможности написать программу (чтобы получить список принтеров на удаленных компьютерах) нашли такое решение...
Так как название надо было получить в виде "computername\sharename", а не "sharename on computername", то воспользовались следующим скриптом, который и выдает список всех shared принтеров на удаленном (или локальном) компьютере (в скрипте используется программа, о которой вспоминали в этой статье).
Синтаксис запуска скрипта:
ListPrinter NetBIOS_Computer_Name
где NetBIOS_Computer_Name это имя "сервера", на котором находятся сетевые принтеры.
Например
listprinter Vasya
выдаст следующий результат:
"\\Vasya\ZFax","ZFax"
"\\Vasya\HP2250","HP Business Inkjet 2250 (PCL5C)"
"\\Vasya\HP2250T1","HP Business Inkjet 2250 Tray 1 (PCL5C)"
"\\Vasya\HPOffice","HP Officejet 6200 series"
Собственно сам batch файл listprinter.bat:
|
@echo off
if {%1}=={} @echo Syntax ListPrinters Computer&goto :EOF
setlocal ENABLEDELAYEDEXPANSION
set c1=%1
set c1=%c1:"=%
set c1=%c1:\=%
set c1=\\%c1:\=%
set b1=FIND /V ":"
set b2=FIND /V "The command completed successfully."
set b3=FIND "Path"
for /f "Skip=4 Tokens=*" %%a in ('rmtshare %c1%^|%b1%^|%b2%') do (
set line=%%a
if "!line:~13,1!" NEQ " " call :c1prt !line:~0,12!
)
endlocal
goto :EOF
:c1Prt
for /f "Tokens=1*" %%b in ('rmtshare %c1%\%1^|%b3%') do (
set work=%%c
set work=!work:,LocalsplOnly=!
@echo "%c1%\%1","!work!"
)
|
|