我创建了一个 VBScript,用于更改服务器上的文件夹共享名称。它目前作为我的测试用户的登录脚本运行。
我已经定义了这个函数:
Private Function intChangeShareName()
Dim intPoz1, intPoz2, intIndex
Dim strPom
intChangeShareName = CONST_NO_CHANGE
strActions = strActions & strOldNameShare & vbcrlf
strPom = Trim(strOldNameShare)
If Left(strPom, 2) <> "\\" then Exit Function
intPoz1 = inStr(3, strPom, "\")
intPoz2 = inStr(3, strPom, ".")
If intPoz2 > 0 Then
strSrvName = Mid(strPom, 3, intPoz2 - 3)
strDomName = Mid(strPom, intPoz2 + 1, intPoz1 - intPoz2 - 1)
Else
strSrvName = Mid(strPom, 3, intPoz1 - 3)
strDomName = ""
End If
intIndex = 0
Do while intIndex <= UBound(arrOldSrv)
If UCase(strSrvName) = UCase(arrOldSrv(intIndex)) Then
If strDomName = "" Then
strNewNameSrv = arrNewSrv(intIndex)
strNewNameDom = ""
intChangeShareName = CONST_CHANGE
End If
If UCase(strDomName) = UCase(arrOldDom(intIndex)) Then
strNewNameSrv = arrNewSrv(intIndex)
strNewNameDom = "." & arrNewDom(intIndex)
intChangeShareName = CONST_CHANGE
End If
End If
intIndex = intIndex + 1
Loop
If intChangeShareName = CONST_CHANGE Then
strNewNameShare = "\\" & strNewNameSrv & strNewNameDom & Mid(strPom, intPoz1)
strActions = strActions & "* " & strNewNameShare & vbcrlf
blRequireLogoff = True
' Wscript.Echo "a " & strNewNameShare
End If
End Function
但是每次我登录时都会出现以下错误:VBScript 运行时错误 - 无效的过程调用或参数:“Mid” - 代码 800A0005
我没有发现我的 Mid 函数有什么问题,有人可以帮帮我吗?
答案1
所有出现的MID
功能在您的代码中正确遵循语法模式Mid(string, start[, length])
:
参数
string
返回字符的字符串表达式。如果字符串包含Null
,Null
则返回。start
字符串中要提取的部分的开始字符位置。如果 start 大于字符串中的字符数,则 Mid 返回零长度字符串 (""
)。length
返回的字符数。如果省略或文本中的字符数少于 length(包括 start 处的字符),则start
返回从该位置到字符串末尾的所有字符。
摘自原始代码片段,变量重命名仅仅是为了清晰起见:
iPosBackSlash = inStr(3, strPom, "\")
iPosDot = inStr(3, strPom, ".")
If iPosDot > 0 Then
strSrvName = Mid(strPom, 3, iPosDot - 3)
strDomName = Mid(strPom, iPosDot + 1, iPosBackSlash - iPosDot - 1)
Else
strSrvName = Mid(strPom, 3, iPosBackSlash - 3)
strDomName = ""
End If
''' and thereinafter '''
strNewNameShare = "\\" & strNewNameSrv & strNewNameDom & Mid(strPom, iPosBackSlash)
另一方面,如果或超出范围,MID
函数将失败并引发终止错误。Invalid procedure call or argument: 'Mid' - Code 800A0005
start
length
让我们考虑一些有效的北卡罗来纳大学路径作为strPom
变量的可能值:
\\server\root
,,,\\server\root\sub
:原始\\server.domain\root
函数\\server.domain\root\sub
不会失败,- 但例如
\\server\root\sub.folder
引发指定问题中的错误length
,即iPosBackSlash - iPosDot - 1
结果为负数。
If (iPosDot > 0) and (iPosDot < iPosBackSlash) Then
应该解决后者的问题尽管有人可以找到一个有效的北卡罗来纳大学路径是否这样iPosDot - 3
或者iPosBackSlash - 3
会导致错误?
回答,返回原始变量名,使用 next改进 If
命令:
If intPoz2 > 0 and (intPoz2 < intPoz1) Then
''' etc '''