在VBScript中使用拆分时下标超出范围

在VBScript中使用拆分时下标超出范围,vbscript,hta,Vbscript,Hta,我发现这个VBScript在HTA应用程序中显示默认打印机的名称。只要设置了默认打印机,它就可以正常工作,但当我在新用户负载上运行它时(当没有任何设置为默认打印机时),它会给出一个错误: 下标超出范围:“[编号:0]” 有办法解决这个问题吗 <SCRIPT Language="VBScript"> dim defaultprn Set WshShell = CreateObject("WScript.Shell") defaultprn = WshShell.RegRead("

我发现这个VBScript在HTA应用程序中显示默认打印机的名称。只要设置了默认打印机,它就可以正常工作,但当我在新用户负载上运行它时(当没有任何设置为默认打印机时),它会给出一个错误:

下标超出范围:“[编号:0]”

有办法解决这个问题吗

<SCRIPT Language="VBScript">
dim defaultprn

Set WshShell = CreateObject("WScript.Shell")


defaultprn = WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")

arrPrnStr = Split(defaultprn,",")
fullPrinterString = arrPrnStr(0)


arrFullPrnStr = Split(fullPrinterString,"\")

shortPrinterName= arrFullPrnStr(Ubound(arrFullPrnStr))

document.write("Default printer: " + shortPrinterName)

If shortPrinterName="Fax" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft XPS Document Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2013" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Print to PDF" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft XPS Document Write" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Document Image Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Office Document Image Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2005" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2006" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2007" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2008" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2009" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2010" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2011" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2012" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2013" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2014" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2015" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2016" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2017" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2018" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2019" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2020" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2021" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2022" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2023" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2024" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2025" Then
changedefaultprinter()
ElseIf shortPrinterName="OneNote" Then
changedefaultprinter()
ElseIf shortPrinterName=Empty  Then
changedefaultprinter()
ElseIf shortPrinterName=Null  Then
changedefaultprinter()

End If
</script>

dim默认PRN
设置WshShell=CreateObject(“WScript.Shell”)
defaultprn=WshShell.regrad(“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device”)
arrPrnStr=Split(defaultprn,“,”)
fullPrinterString=arrPrnStr(0)
arrFullPrnStr=Split(fullPrinterString,“\”)
shortPrinterName=arrFullPrnStr(Ubound(arrFullPrnStr))
document.write(“默认打印机:”+shortPrinterName)
如果shortPrinterName=“传真”,则
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft XPS Document Writer”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2013”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft打印为PDF”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft XPS文档写入”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft文档图像编写器”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft Office文档图像编写器”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2005”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2006”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2007”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2008”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2009”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2010”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2011”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2012”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2013”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2014”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2015”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2016”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2017”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2018”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2019”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2020”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2021”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2022”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2023”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2024”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2025”然后
changedefaultprinter()
ElseIf shortPrinterName=“OneNote”则
changedefaultprinter()
ElseIf shortPrinterName=然后为空
changedefaultprinter()
ElseIf shortPrinterName=Null然后
changedefaultprinter()
如果结束

提前感谢。

问题是您正在尝试使用空变量创建数组。由于用户没有默认打印机,注册表读取返回为空。将空白放入数组会产生错误。因此,您只需检查其是否为空,例如使用。 我添加了一个额外的IF语句,以便在执行其余代码之前进行检查。底部还有一个else,这意味着如果它是emtpy,则输出一条没有默认打印机的自定义消息

<SCRIPT Language="VBScript">
dim defaultprn    
Set WshShell = CreateObject("WScript.Shell")   
defaultprn = WshShell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device")    

if defaultprn <> "" Then

arrPrnStr = Split(defaultprn,",")
fullPrinterString = arrPrnStr(0)  
arrFullPrnStr = Split(fullPrinterString,"\")
shortPrinterName= arrFullPrnStr(Ubound(arrFullPrnStr))
document.write("Default printer: " + shortPrinterName)
If shortPrinterName="Fax" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft XPS Document Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2013" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Print to PDF" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft XPS Document Write" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Document Image Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Microsoft Office Document Image Writer" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2005" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2006" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2007" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2008" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2009" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2010" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2011" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2012" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2013" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2014" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2015" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2016" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2017" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2018" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2019" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2020" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2021" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2022" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2023" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2024" Then
changedefaultprinter()
ElseIf shortPrinterName="Send To OneNote 2025" Then
changedefaultprinter()
ElseIf shortPrinterName="OneNote" Then
changedefaultprinter()
ElseIf shortPrinterName=Empty  Then
changedefaultprinter()
ElseIf shortPrinterName=Null  Then
changedefaultprinter()

Else
document.write("Default printer: " + "None")
changedefaultprinter()
End if

End If
</script>

dim默认PRN
设置WshShell=CreateObject(“WScript.Shell”)
defaultprn=WshShell.regrad(“HKEY\U CURRENT\U USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\Device”)
如果为defaultprn“”,则
arrPrnStr=Split(defaultprn,“,”)
fullPrinterString=arrPrnStr(0)
arrFullPrnStr=Split(fullPrinterString,“\”)
shortPrinterName=arrFullPrnStr(Ubound(arrFullPrnStr))
document.write(“默认打印机:”+shortPrinterName)
如果shortPrinterName=“传真”,则
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft XPS Document Writer”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2013”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft打印为PDF”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft XPS文档写入”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft文档图像编写器”然后
changedefaultprinter()
ElseIf shortPrinterName=“Microsoft Office文档图像编写器”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2005”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2006”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2007”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2008”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2009”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2010”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2011”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2012”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2013”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2014”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2015”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2016”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2017”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2018”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2019”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2020”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2021”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2022”然后
changedefaultprinter()
ElseIf shortPrinterName=“发送到OneNote 2023”然后
changedefaultprinter()
其他的