使用LIKE比较字符串“Sub或Function not defined”的VBS

时间:2015-05-18 10:44:17

标签: vbscript

我正在尝试创建一个脚本来将网络打印机连接到用户计算机。 该脚本使用需要打印机作为参数的计算机名称。

打印机名称与其打印服务器名称相似,例如。 server_USA有打印机,如printer_USA01,printer_USA02。

但是当它到达第一个时,它会抛出错误“Sub或Function not defined”...为什么?

Set shl = WScript.CreateObject("WScript.Shell")
strName = Wscript.Arguments.Item(0)

'input Printer name
strPrinter = InputBox("Please enter share name of printer to install:", _
    "Add network printer")

if strPrinter = "" then
    msgbox "Can't be empty."
    WScript.quit

elseif strPrinter Like "printer_USA*" then
    strServer = server_USA

elseif strPrinter Like "printer_SPAIN*" then
    strServer = server_SPAIN

else
    'Printer name NOT registered, input printserver manually:
    strServer = inputbox("Please enter the name of the printserver","printserver")

    if strServer = "" then
        msgbox "Can't be empty."
        WScript.quit
    End if

End if

'ADD
shl.run "RUNDLL32 PRINTUI.DLL,PrintUIEntry /ga /c\\" & strName & " /n\\" & strServer & "\" & strPrinter

4 个答案:

答案 0 :(得分:6)

VBScript中没有Like运算符。您可以使用Instr

if strPrinter = "" then
    msgbox "Can't be empty."
    WScript.quit

elseif Instr( 1, strPrinter, "printer_USA", vbTextCompare ) > 0 then
    strServer = server_USA

vbTextCompare常量(值= 1)用于执行文本比较

答案 1 :(得分:0)

您可以使用 StrComp 以这种方式获得相同的结果

    If StrComp(strPrinter,"printer_USA",vbTextCompare)=0 then  
    strServer = server_USA
    End IF

等于 0 表示 strPrinter printer_USA 之间的零差,忽略字母大小写因为我们使用 vbTextCompare

您可以将 vbTextCompare 替换为 1 ,您将获得相同的结果。

如果字母大小写很重要,则可以使用 vbBinaryCompare 0

答案 2 :(得分:0)

一种使用选择大小写的方法。此版本的instr()区分大小写,但其他版本则不区分大小写。 instr()返回找到的子字符串的位置,该位置始终为1。

function test(restart){
  ...
}

答案 3 :(得分:0)

我使用了以下替代方法(VBScript正则表达式)… 使用的语法与LIKE稍有不同,但最简单的解决方案是成功进行匹配,类似于LIKE运算符。

dim regExp
set regExp=CreateObject("VBScript.RegExp")
regExp.IgnoreCase = true
regExp.Global = true
regxp.Pattern = ".*Test Pattern.*" ' example only, basic pattern

if regExp.Test(MyString) then
    ' match successful
end if