Board logo

标题: [系统相关] 共享打印机批处理脚本错误和正确,返回值都是0? [打印本页]

作者: houp    时间: 2019-12-8 17:33     标题: 共享打印机批处理脚本错误和正确,返回值都是0?

本帖最后由 houp 于 2019-12-10 12:41 编辑
  1. @echo off
  2. ping 192.168.113.1 -n 1     
  3. IF %errorlevel% == 0 (
  4. goto start
  5. )else (
  6. msg %username% /time:60 "网络不通!请检查网络连接!"
  7. exit
  8. )
  9. :start
  10. cmdkey /add:192.168.113.1 /user:printers /pass:1234!@#$ >nul 2>nul
  11. rem # 添加共享打印机服务器凭据,以便解决客户主机重启后打印机连接失效!
  12. rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.113.1\8楼打印机"
  13. rem # 安装\\192.168.113.1\8楼打印机"并设置为不共享"。
  14. [color=Red]IF %errorlevel% == 0 [/color](
  15. rundll32 printui.dll,PrintUIEntry /y /n  "\\192.168.113.1\8楼打印机"
  16. rem #将 \\192.168.113.1\8楼打印机"自动设置为默认打印机。
  17. control.exe /name Microsoft.Printers
  18. rem # 打开设备和打印机  
  19. msg %username% /time:60 "8楼 打印机安装完成,请使用!"
  20. )else (
  21. msg %username% /time:30 "权限不足!请联系系统管理员"
  22. exit
  23. )
复制代码
以上为代码 ,执行安装没问题,只是在共享权限异常时,执行到rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.113.1\8楼打印机"后     if %errorlevel% == 0 判断失效! 不管能不能安装成功,返回值都是0,导致最后的  权限提示永远不会生效!
请问大神有解决办法吗?
作者: a20150604    时间: 2019-12-8 18:25

本帖最后由 a20150604 于 2019-12-8 18:26 编辑
  1. @echo off & setlocal enabledelayedexpansion
  2. echo;errorlevel=!errorlevel!
  3. nothiscommand
  4. echo;errorlevel=!errorlevel!
  5. dir ZZZ:\NOTHISDIR
  6. echo;errorlevel=!errorlevel!
  7. pause
  8. exit
复制代码

作者: Batcher    时间: 2019-12-8 20:02

回复 1# houp


试试这样可以吗
  1. @echo off
  2. ping 192.168.113.1 -n 1     
  3. if %errorlevel% == 0 (
  4.     goto start
  5. ) else (
  6.     msg %username% /time:60 "网络不通!请检查网络连接!"
  7.     goto :eof
  8. )
  9. :start
  10. cmdkey /add:192.168.113.1 /user:print /pass:123qwe@#$ >nul 2>nul
  11. rem # 添加共享打印机服务器凭据,以便解决客户主机重启后打印机连接失效!
  12. rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.113.1\8楼打印机"
  13. if errorlevel 1 (
  14.     msg %username% /time:30 "权限不足!请联系系统管理员"
  15.     goto :eof
  16. ) else (
  17.     rem # 安装\\192.168.113.1\8楼打印机"并设置为不共享"。
  18.     rundll32 printui.dll,PrintUIEntry /y /n /q "\\192.168.113.1\8楼打印机"
  19.     rem #将 \\192.168.113.1\8楼打印机"自动设置为默认打印机。
  20.     control.exe /name Microsoft.Printers
  21.     rem # 打开设备和打印机  
  22.     msg %username% /time:60 "8楼 打印机安装完成,请使用!"
  23. )
复制代码

作者: houp    时间: 2019-12-10 12:39

回复 3# Batcher

你好! 我经过测试,当“rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.113.1\8楼打印机" ”这条命令,执行错误时,依然返回值为零 !也就是说打印机安装成功与否,返回值都为零!
网络通,但由于共享权限等问题导致打印机安装失败:

rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.112.140\8楼打印机"
rem # 静默安装"\\192.168.113.1\8楼打印机"并不共享
作者: houp    时间: 2019-12-10 12:49

回复 2# a20150604


  你好!  我直接粘贴在脚本前面,执行也是错误
你看下还有别的解决方法吗?
作者: a20150604    时间: 2019-12-10 18:33

本帖最后由 a20150604 于 2019-12-10 18:45 编辑

回复 5# houp
看看这个
  1. @echo off
  2. REM 如果已安装过此打印机, 就先删除
  3. (wmic printer where "Name='\\\\192.168.113.1\\8楼打印机'" get Name | FIND /i "\\192.168.113.1\8楼打印机") && (
  4.     echo;delete "\\192.168.113.1\8楼打印机"
  5.     wmic printer where "Name='\\\\192.168.113.1\\8楼打印机'" delete
  6. ) || (
  7.     echo;NOT FOUND THE PRINTER
  8. )
  9. REM TODO 安装打印机
  10. REM ...
  11. REM 如果已安装过此打印机, 就先删除
  12. REM 如果存在指定名称的打印机, 下行语句将把 ERRORLEVEL 设置为 0, 否则 将 设为 1
  13. wmic printer where "Name='\\\\192.168.113.1\\8楼打印机'" get Name | FIND /i "\\192.168.113.1\8楼打印机"
  14. echo;errorlevel=%errorlevel%
  15. wmic printer where "Name='NO_THIS_NAME_Printer'" get Name | FIND /i "NO_THIS_NAME_Printer"
  16. echo;errorlevel=%errorlevel%
  17. pause
  18. exit
复制代码

作者: houp    时间: 2019-12-10 20:10

本帖最后由 houp 于 2019-12-10 20:19 编辑

回复 6# a20150604

非常感谢!根据你的详细的思路,我的共享打印机脚本已经完美运行,
     下面是我根据你的代码,更改后的脚本:

@echo off
rem # 检测目标主机网络的连通性,通则继续进行打印机安装,否则弹窗提示“ 网络不通,请检查网络”并自动退出安装。
ping 192.168.113.1 -n 1

IF %errorlevel% == 0 (
    goto start
)else (
    msg %username% /time:60 "网络不通!请检查网络"
    exit
)

:start
rem # 添加共享打印机服务器凭据,以便解决客户主机重启后打印机连接失效!
cmdkey /add:192.168.113.1/user:print /pass:1234!@#$ >nul 2>nul

rem # 安装\\192.168.113.1\8楼打印机"并设置为不共享"。
rundll32 printui.dll,PrintUIEntry /in /u /z /q /n "\\192.168.113.1\8楼打印机"
rem #将 \\192.168.113.1\8楼打印机"自动设置为默认打印机。
rundll32 printui.dll,PrintUIEntry /y /n "\\192.168.113.1\8楼打印机"
rem # 自动打开控制面板中的  设备和打印机
control.exe /name Microsoft.Printers

REM 如果存在指定名称的打印机,弹窗提示安装成功,否则弹窗提示安装失败!
wmic printer where "Name='\\\\192.168.113.1\\8楼打印机'" get Name | FIND /i "\\192.168.113.1\8楼打印机"
(echo;errorlevel=%errorlevel%)|findstr "0" && msg %username% /time:30 "8楼打印机安装成功"
(echo;errorlevel=%errorlevel%)|findstr "1" && msg %username% /time:60 "8楼打印机安装失败!"





REM # /in 安装网络打印机

REM # /u 如果已经存在驱动,直接使用,

REM # /z 不共享打印机

REM # /q 执行静默安装

REM # /n 打印机名称

REM # /y 设置默认打印机
作者: houp    时间: 2019-12-10 20:25

我们公司的员工比较多,都是员工自己安装,所以都需要弹窗提醒!以便提醒他们打印机的安装结果!


非常感谢大家耐心的帮忙! 让我的脚本得以完美运行!
作者: kswdiy    时间: 2019-12-14 11:25

你这段代码 在微信那个就是你啊

这个代码中在 nt5 系统有2段语其中
rem # 添加共享打印机服务器凭据,以便解决客户主机重启后打印机连接失效!
cmdkey /add:192.168.113.1/user:print /pass:1234!@#$ >nul 2>nul
账户我知道是 print  密码怎么书写 是 1234!  还是1234!@#$   ????

跳过这个我给这段代码rem  过去 在 nt5  凑合过去



REM 如果存在指定名称的打印机,弹窗提示安装成功,否则弹窗提示安装失败!
wmic printer where "Name='\\\\192.168.113.1\\8楼打印机'" get Name | FIND /i "\\192.168.113.1\8楼打印机"
(echo;errorlevel=%errorlevel%)|findstr "0" && msg %username% /time:30 "8楼打印机安装成功"
(echo;errorlevel=%errorlevel%)|findstr "1" && msg %username% /time:60 "8楼打印机安装失败!"

这段 我在xp  03  安装都是提示失败 实际是安装成功的...  这判断语句有待改进




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2