无法使用PRNMNGR删除具有撇号的打印机(')

时间:2018-03-28 15:35:14

标签: batch-file command-line vbscript special-characters apostrophe

我有一台名为" 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"

我觉得我已经尝试过双引号,单引号和我尝试转义字符的所有组合。

最终,这将使它成为我正在编写的批处理脚本,但我需要首先让各个命令正常工作。

我知道我做错了什么,感谢任何帮助。

1 个答案:

答案 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原始版本。