我遇到了一个vbscript的情况,这种情况正在困扰着我的冬青地狱。我正在编写一个vbscript,它为用户提取默认的打印机名称。我需要这个的原因是我稍后删除所有打印机,然后用不同的驱动程序将它们放回去(该代码正常工作),我想将用户默认打印机放回到那个打印机。
现在下面是我的代码我遇到的问题是如果我硬编码NetID一切正常但是如果我动态地执行它如下所示我得到一个错误。并非所有计算机都具有相同的netID,因此我需要动态执行此操作。我只是不明白为什么我的代码出错了。错误消息是“注册表项中的root无效”。
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test)
示例:
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\" & Key & "\"
WScript.echo WshShell.RegRead(Test) ' Error message
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.echo WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID")
Key = WshShell.RegRead("HKEY_CURRENT_USER\Printers\Defaults\NetID") ' Returns 12345
Test = "HKEY_CURRENT_USER\Printers\Defaults\12345\"
WScript.echo WshShell.RegRead(Test) 'Returns Default printer value of Lexmark T642
这是我无法弄清楚的。密钥在那里,并将一个名为(Default)的值设置为默认打印机的名称。我可以硬编码脚本以获得我需要的但不是每台机器都具有相同的NetID。我不知道它为什么工作硬编码而不是动态?
答案 0 :(得分:0)
当您尝试阅读的密钥不存在时,会显示该错误消息。 例如,在我的机器上运行此代码
Set WshShell = WScript.CreateObject("WScript.Shell")
Key = WshShell.RegRead("HKCU\Printers\DeviceOld")
WScript.Echo Key ' -> "Foxit PDF Printer"
Test = "HKCU\Printers\" & Key & "\"
' ADD this line for debuging
WScript.Echo Test ' -> "HKCU\Printers\Foxit PDF Printer\"
' but that key not exist, so...
Key = WshShell.RegRead(Test) ' -> ...of couse error