Group-Policy
VBScript MID 函式 - 無效的過程呼叫或參數 - 程式碼 800A0005
我創建了一個 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])
:論據
string
從中返回字元的字元串表達式。如果字元串包含Null
,Null
則返回。start
字元串中要提取的部分開始的字元位置。如果 start 大於 string 中的字元數,則 Mid 返回零長度字元串 (""
)。length
要返回的字元數。如果省略或文本中的字元少於長度(包括開頭的字元),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
讓我們考慮一些有效的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
命令:If intPoz2 > 0 and (intPoz2 < intPoz1) Then ''' etc '''