我创建了一个 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 功能有什么问题,有人可以帮我吗?
代码中所有出现的
MID
函数都正确遵循语法模式Mid(string, start[, length])
:摘自原始代码片段,变量重命名只是为了清楚起见:
另一方面,如果或超出范围,
MID
函数将无法引发终止错误。Invalid procedure call or argument: 'Mid' - Code 800A0005
start
length
让我们考虑一些有效的UNC路径作为
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
应该解决后一个问题,尽管有人可以找到有效的UNC路径,这样iPosDot - 3
或iPosBackSlash - 3
会导致错误?答案,返回原始变量名,使用下一个改进的
If
命令: