编写打印机自动安装批处理脚本时IF语句报错求助
批处理打印机安装脚本错误排查与修复
核心错误点
- SET /P与CHOICE命令混用:SET /P用于接收用户自由输入文本,CHOICE是独立的限定选项选择命令,两者不能合并写在同一行,这会导致变量完全无法正确赋值。
- 变量定义语法错误:SET命令定义变量时,变量名不需要加
%包裹,例如SET /p %printer%=是错误写法,正确应为SET /p printer=,否则会把变量名解析为已有变量的值,导致用户输入无法被正确存储。 - IF判断的变量有效性问题:由于前面变量未正确赋值,IF执行时
%input%或%printer%为空,导致分支内的命令被错误解析,触发"rundll32 not expected"报错。
修正后的完整脚本
:: 列出可选打印机 ECHO 请从以下列表中输入要安装的打印机名称(区分大小写):List, of, printers :: 获取用户选择的打印机并存储变量 SET /p printer=请输入您选择的打印机名称: :: 询问是否设置为默认打印机 ECHO 是否将该打印机设置为默认打印机? ECHO 输入 Y 或 N :: 获取用户选择并存储变量 SET /p input=请输入选择: :: 根据选择执行打印机安装命令 IF /I "%input%"=="N" ( rundll32 printui.dll PrintUIEntry /in /n\\printserver\%printer% ) ELSE ( rundll32 printui.dll PrintUIEntry /in /y /n\\printserver\%printer% ) Pause
规范优化版本(用CHOICE限制输入选项)
如果想避免用户输入错误,推荐使用CHOICE命令限定可选输入,脚本如下:
:: 列出可选打印机 ECHO 可选打印机: ECHO L - List ECHO O - of ECHO P - printers :: 使用CHOICE获取打印机选择 CHOICE /c LOP /cs /n /m "请选择打印机(L/O/P):" IF ERRORLEVEL 3 SET printer=printers IF ERRORLEVEL 2 SET printer=of IF ERRORLEVEL 1 SET printer=List :: 询问是否设置为默认打印机 CHOICE /c YN /cs /n /m "是否设置为默认打印机?(Y/N):" :: 根据选择执行安装命令 IF ERRORLEVEL 2 ( rundll32 printui.dll PrintUIEntry /in /n\\printserver\%printer% ) ELSE ( rundll32 printui.dll PrintUIEntry /in /y /n\\printserver\%printer% ) Pause
内容的提问来源于stack exchange,提问作者Ledian
相关产品推荐
相关产品推荐

