Vbscript VB脚本错误-以前工作过,但现在没有混淆

Vbscript VB脚本错误-以前工作过,但现在没有混淆,vbscript,Vbscript,我犯了一个错误 VB文件读取col1并在目录中找到匹配的图像名称,然后将该文件重命名为col2,它会生成一个报告,显示哪些图像尚未重命名,并将那些图像放置在名为rename的文件夹中 我已经附上了代码,所以你可以看到 strDocMap = "C:\img\DocMap.xlsx" strInputFolder = "C:\img\" strOutputFolder = "C:\img\renamed\" strLogFile = "C:\img\RenamingLog.txt" strPa

我犯了一个错误

VB文件读取col1并在目录中找到匹配的图像名称,然后将该文件重命名为col2,它会生成一个报告,显示哪些图像尚未重命名,并将那些图像放置在名为rename的文件夹中

我已经附上了代码,所以你可以看到

strDocMap = "C:\img\DocMap.xlsx"
strInputFolder = "C:\img\"
strOutputFolder = "C:\img\renamed\"
strLogFile = "C:\img\RenamingLog.txt" 
strPattern = "\d{5}"

Set regExpression = New RegExp
With regExpression
.Global = True
.IgnoreCase = True
.Pattern = strPattern
End With
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = True
Const xlUp = -4162
Const xlFormulas = -4123
Const xlPart = 2
Const xlByRows = 1
Const xlNext = 1
Set objWB = objExcel.Workbooks.Open(strDocMap, False, True)
Set objSheet = objWB.Sheets(1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If Right(strInputFolder, 1) <> "\" Then strInputFolder = strInputFolder & "\"
If Right(strOutputFolder, 1) <> "\" Then strOutputFolder = strOutputFolder & "\"

If objFSO.FolderExists(strOutputFolder) = False Then objFSO.CreateFolder strOutputFolder
Set objLog = objFSO.CreateTextFile(strLogFile, True)
objLog.WriteLine "Script started " & Now
objLog.WriteLine "Enumerating files in folder: " & strInputFolder
objLog.WriteLine "Renaming files to folder: " & strOutputFolder
objLog.WriteLine String(80, "=")

For Each objFile In objFSO.GetFolder(strInputFolder).Files
Set colMatches = regExpression.Execute(objFile.Name)
If colMatches.Count > 0 Then
    If colMatches.Count = 1 Then
        For Each objMatch In colMatches
            strOldNum = objMatch.Value
            Set objCell = objSheet.Cells.Find(strOldNum,         objSheet.Range("A1"), xlFormulas, xlPart, xlByRows, xlNext, False, False)
            If Not objCell Is Nothing Then
                strNewNum = objCell.Offset(0, 1).Value
                If strNewNum <> "" Then
                    strNewPath = strOutputFolder & strNewNum & "." & objFSO.GetExtensionName(objFile.Path)
                    ' Check if a file already exists without the appended letter
                    blnValid = True
                    If objFSO.FileExists(strNewPath) = True Then
                        blnValid = False
                        ' Start at "a"
                        intLetter = 97
                        strNewPath = strOutputFolder & strNewNum & Chr(intLetter) & "." & objFSO.GetExtensionName(objFile.Path)
                        Do While objFSO.FileExists(strNewPath) = True
                            intLetter = intLetter + 1
                            strNewPath = strOutputFolder & strNewNum & Chr(intLetter) & "." & objFSO.GetExtensionName(objFile.Path)
                            If intLetter > 122 Then Exit Do
                        Loop
                        If intLetter <= 122 Then blnValid = True
                    End If
                    If blnValid = True Then
                        objLog.WriteLine "Renaming " & objFile.Name & " to " & Mid(strNewPath, InStrRev(strNewPath, "\") + 1)
                        objFSO.MoveFile objFile.Path, strNewPath
                    Else
                        objLog.WriteLine "Unable to rename " & objFile.Name & ". Letters exhausted."
                    End If
                End If
            End If
        Next
    Else
        objLog.WriteLine objFile.Name & " contains " & colMatches.Count & " matches. Manual adjustment required."
    End If
End If
Next
objLog.WriteLine String(80, "=")
objLog.WriteLine "Script finished " & Now
objWB.Close False
objExcel.Quit

objLog.Close
MsgBox "Done"
strDocMap=“C:\img\DocMap.xlsx”
strInputFolder=“C:\img\”
strOutputFolder=“C:\img\rename\”
strLogFile=“C:\img\RenamingLog.txt”
strPattern=“\d{5}”
Set regExpression=New RegExp
带正则表达式
.Global=True
.IgnoreCase=True
.Pattern=strPattern
以
设置objExcel=CreateObject(“Excel.Application”)
objExcel.Visible=True
常数xlUp=-4162
常数xl公式=-4123
常数xlPart=2
常数xlByRows=1
常数xlNext=1
设置objWB=objExcel.Workbooks.Open(strDocMap,False,True)
设置objSheet=objWB.Sheets(1)
设置objFSO=CreateObject(“Scripting.FileSystemObject”)
如果正确(strInputFolder,1)“\”则strInputFolder=strInputFolder&“\”
如果正确(strOutputFolder,1)“\”则strOutputFolder=strOutputFolder&“\”
如果objFSO.FolderExists(strOutputFolder)=False,则objFSO.CreateFolder strOutputFolder
设置objLog=objFSO.CreateTextFile(strLogFile,True)
objLog.WriteLine“脚本已启动”&现在
objLog.WriteLine“枚举文件夹中的文件:”&strInputFolder
objLog.WriteLine“将文件重命名为文件夹:”&strOutputFolder
objLog.WriteLine字符串(80,“=”)
对于objFSO.GetFolder(strInputFolder).Files中的每个objFSO文件
Set colMatches=regExpression.Execute(objFile.Name)
如果colMatches.Count>0,则
如果colMatches.Count=1,则
对于colMatches中的每个objMatch
strOldNum=objMatch.Value
设置objCell=objSheet.Cells.Find(strOldNum,objSheet.Range(“A1”)、xlFormulas、xlPart、xlByRows、xlNext、False、False)
如果不是objCell,那么什么都不是
strNewNum=objCell.Offset(0,1).Value
如果strNewNum“”那么
strNewPath=strOutputFolder&strNewNum&“&objFSO.GetExtensionName(objFile.Path)
'检查是否已存在没有附加字母的文件
blnValid=True
如果objFSO.FileExists(strNewPath)=True,则
blnValid=False
“从a开始”
intLetter=97
strNewPath=strOutputFolder&strNewNum&Chr(intLetter)&“&objFSO.GetExtensionName(objFile.Path)
当objFSO.FileExists(strNewPath)=True时执行
intLetter=intLetter+1
strNewPath=strOutputFolder&strNewNum&Chr(intLetter)&“&objFSO.GetExtensionName(objFile.Path)
如果intLetter>122,则退出Do
环

如果行68

objLog.WriteLine objFile.Name & " contains " & colMatches.Count & " matches. Manual adjustment required."
是真正的罪魁祸首,我认为:

  • 以前使用过对象objLog、objFile和colMatches- 无罪释放
  • 方法.WriteLine、.Name和.Count看起来不错-无罪释放
  • 串联(&)应该适用于字符串文本,而不是 null/empty/nothing元素-无罪释放
  • 通过删除:objFile.Name包含一个有趣的字母(不是 可转换为“ASCII”)。易于检查:将“objFile.Name”替换为 字符串文字
  • 证据

      Dim s
      For Each s In Array(Empty, Null, ChrW(1234))
        On Error Resume Next
         goFS.CreateTextFile("tmp.txt", True).WriteLine s
         WScript.Echo Err.Description
        On Error GoTo 0
      Next
    
    输出:

    ====================================
    
    Type mismatch
    Invalid procedure call or argument
    ====================================
    

    你能发布代码吗,第68行并不是真的意味着很抱歉是的,只是在寻找上传链接,只是记得我没有上传脚本Sorry这一行是86-objLog.WriteLine objFile.Name&“contains”&colMatches.Count&“matches.需要手动调整。”