我有一台名为" Teacher's Lounge Printer
" (注意撇号)。
在标准Windows 7命令提示符下执行以下命令时," Error 0x8004103A Invalid object path
"发生。
cscript "%WINDIR%\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs" -d -p "Teacher's Lounge Printer"
如果我将打印机重命名为" Teachers Lounge Printer
" (没有撇号),没有撇号的命令将成功执行。
cscript "%WINDIR%\System32\Printing_Admin_Scripts\en-US\prnmngr.vbs" -d -p "Teachers Lounge Printer"
我觉得我已经尝试过双引号,单引号和我尝试转义字符的所有组合。
最终,这将使它成为我正在编写的批处理脚本,但我需要首先让各个命令正常工作。
我知道我做错了什么,感谢任何帮助。
答案 0 :(得分:1)
Microsoft的prnmngr.vbs脚本使用WMI来提供底层功能。
WMI使用单'
个引号或双"
引号接受引用的字符串。不幸的是,prnmngr.vbs的开发人员选择在两个地方使用单引号,这会在打印机名称包含单引号(撇号)时导致问题。
我还没想办法以一种WMI接受的方式逃脱prnmnger.vbs参数中的'
。但我已经想出如何破解(调试)Microsoft prnmngr.vbs代码来消除这个问题。
在我的机器上,第462和818行有两条相同的违规行。
set oPrinter = oService.Get("Win32_Printer.DeviceID='" & strPrinter & "'")
可以通过在WMI查询字符串中切换到使用双引号来修复错误。由于双引号文字在VBS引用字符串中,因此引号必须转义为""
。
set oPrinter = oService.Get("Win32_Printer.DeviceID=""" & strPrinter & """")
您可能希望将文件复制到另一个文件夹,然后在那里进行更改,而不是修改原始Microsoft文件,而是运行该黑客版本而不是Microsoft原始版本。