適用環境
1. PC 使用 Windows XP (或相容 XP 內的某些 vbs 與 dll )
2.
印表機使用標準 TCP/IP 連線
3. 印表機驅動程式不需要透過 .exe 或 .msi 安裝
4.
沒有網域或不想用網域時
目錄結構
printui.bat (如下)
prnport.bat
(如下)
spooler.bat (如下)
templete.bat (如下)
驅動程式
(請自行取名)
使用方法
1. 建立一個專門新增印表機用的目錄
2.
把底下四個檔案複製到目錄下
3. 把印表機驅動程式解開, 放在喜歡的目錄下
4. 複製 templete.bat , 改成易用的檔名. (例如:
苗栗後龍分公司產線3機台A旁邊會計室廁所門口右邊的印表機.bat )
5. 修改批次檔內容, 需要的資料有:
a. 印表機 IP
(變數 port )
b. 印表機驅動程式的位置 (變數 file , 可用相對路徑, 但是要連 .inf 都列上, 例如:
printer_drivers\hpson\oemsetup.inf )
c. 印表機型號 (變數 model , 需要看 .inf
內容找出來, 例如: HPson LaserStyles Color 65536 )
d. 給使用者看的印表機名稱 (變數: base
, 改成易辨識的名稱 (例如: 苗栗後龍分公司產線3機台A旁邊會計室廁所門口右邊的印表機 )
6.
執行該批次檔.
備註
1. 其實很多都是 Windows XP 內建的功能, 有不懂的請先看
Windows XP 說明, 或者把每行指令分別執行看看.
2. 批次檔只有兩個檢查: a. ping IP 確定印表機活著 b. 檢查驅動程式存在 ;
所以執行結果如果不如預期, 請先自行排解.
3. 把批次檔拆開的用意, 是可以分開處理多種印表機的組合, 例如:
a. 單獨一台: prnport
-> spooler -> printui
b. 多台: prnport_a -> prnport_b -> prnport_c
-> spooler -> printui_a -> printui_b -> printui_c , 這樣 spooler
只要重新啟動一次即可(省時)
4. templete.bat 中,
印表機型號或給使用者看的名稱如果有空白, 請用雙引號括起來.
(0.20
版)
功能異動:
(新)支援刪除印表機或port的功能
(新)檢查印表機或port是否已經存在
(新)有提示訊息
(新)利用新的變數寫法, 避免引號造成程式無法運作
檔案架構:
與 0.15 版相同
無法處理的情況:
1. 單一port有多台印表機.
2. 舊版本(0.1)安裝時會冒出多台"複件"印表機.
3. 移除印表機驅動程式. (考慮列入修改)
4. 設定檔中剛好有名稱是 ,ADD, 或 ,DEL, 會造成誤判.
5. 批次檔的執行目錄無法是網芳, 不適合以 GPO 派送.
下次改版考慮:
1. 提供日期功能. (以後本機有記錄, 只要設定檔內大於這記錄的設備才異動)
2. 將目錄設定為可以透過網芳安裝. (不直接使用 GPO 安裝, 不過可以透過開機執行呼叫)
3. 考慮是否刪除不必要的印表機驅動程式.
功能異動:
(新)支援刪除印表機或port的功能
(新)檢查印表機或port是否已經存在
(新)有提示訊息
(新)利用新的變數寫法, 避免引號造成程式無法運作
檔案架構:
與 0.15 版相同
無法處理的情況:
1. 單一port有多台印表機.
2. 舊版本(0.1)安裝時會冒出多台"複件"印表機.
3. 移除印表機驅動程式. (考慮列入修改)
4. 設定檔中剛好有名稱是 ,ADD, 或 ,DEL, 會造成誤判.
5. 批次檔的執行目錄無法是網芳, 不適合以 GPO 派送.
下次改版考慮:
1. 提供日期功能. (以後本機有記錄, 只要設定檔內大於這記錄的設備才異動)
2. 將目錄設定為可以透過網芳安裝. (不直接使用 GPO 安裝, 不過可以透過開機執行呼叫)
3. 考慮是否刪除不必要的印表機驅動程式.
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prndrvr.vbs -x
4.
考慮自動刪除"複件"印表機.printers.bat
@echo off
set file-set=printers.csv
set
source=slime@sa
if not exist %file-set% goto filesetnotexist
for
/f "delims=, tokens=1,2,3,4" %%f in ('findstr ",DEL," %file-set%') do call
printui.bat DEL "%%f" "%%g" "%%h" "%%i"
for /f "delims=, tokens=3" %%f in
('findstr ",DEL," %file-set%') do call prnport.bat DEL "%%f"
for /f "delims=,
tokens=3" %%f in ('findstr ",ADD," %file-set%') do call prnport.bat ADD
"%%f"
for /f "delims=, tokens=3" %%f in ('findstr ",REM," %file-set%') do
echo spooler.bat don't paste to microsoft forum "%%f" > NUL
call
spooler.bat
for /f "delims=, tokens=1,2,3,4" %%f in ('findstr ",ADD,"
%file-set%') do call printui.bat ADD "%%f" "%%g" "%%h" "%%i"
goto
end
:filesetnotexist
echo 找不到設定檔
goto end
:end
set
file-set=
pause
printui.bat
@echo off
set port=%~4
set file=%~5
set model=%~3
set
base=%~2
if "%file%"=="" goto end
if "%1"=="ADD" goto add
if
"%1"=="DEL" goto del
goto
end
:add
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnmngr.vbs -l | findstr "%base%" > NUL
if
errorlevel 1
(
%windir%\system32\rundll32.exe
%windir%\system32\printui.dll,PrintUIEntry /if /b "%base%" /f "%file%" /r
"IP_%port%" /m "%model%" /u >
NUL
echo INFO: 新增 %base%
) else
(
echo INFO: %base% 已存在
)
goto
end
:rem
%SystemRoot%\system32\cscript.exe
%SystemRoot%\study-area\prnmngr.vbs -x > NUL
goto
end
:del
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnmngr.vbs -l | findstr "%base%" > NUL
if
errorlevel 1 (
echo INFO: %base%
不存在
) else
(
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnmngr.vbs -d -p "%base%" > NUL
echo INFO: 刪除 %base%
)
goto
end
:end
set port=
set file=
set model=
set
base=
prnport.bat
@echo off
set port=%~2
if "%port%"=="" goto end
if
"%1"=="ADD" goto add
if "%1"=="DEL" goto del
goto
end
:add
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnport.vbs -l | findstr "IP_%port%" > NUL
if
errorlevel 1
(
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnport.vbs -a -r "IP_%port%" -h "%port%" -o raw -n 9100
> NUL
echo INFO: 新增 IP_%port%
)
else (
echo INFO: IP_%port%
已存在
)
goto end
:del
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnport.vbs -l | findstr "IP_%port%" > NUL
if
errorlevel 1 (
echo INFO: IP_%port%
不存在
) else
(
%SystemRoot%\system32\cscript.exe
%SystemRoot%\system32\prnport.vbs -d -r "IP_%port%" > NUL
echo INFO: 刪除 IP_%port%
echo WARNING: 由 %slime% 製作
> NUL
)
goto end
:end
set port=
沒有留言:
張貼留言