我需要在多个文件夹中重命名文件。如果文件名是“1”或“main”或“MAIN”,我想以不同方式重命名。如果我想重命名所有文件但现在显示类型不匹配错误,代码可以正常工作。
Sub rename()
Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a
i = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFolder = fso.GetFolder("C:\Users\anu\Desktop\Black")
For Each fsoSubFolder In fsoFolder.Subfolders
For Each fsoFile In fsoSubFolder.Files
strName = fsoFile.Name
strPath = Left(fsoFile.Path, Len(fsoFile.Path) - Len(strName))
a = fsoFile.Name
If a = "main" Or "Main" Or "MAIN" Or "1" Then
fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & "Main" & ".jpg"
fso.DeleteFile strPath & strName
Else
fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & i & ".jpg"
fso.DeleteFile strPath & strName
i = i + 1
End If
Next
i = 1
Next
End Sub
如何在不收到错误的情况下检查该情况?
答案 0 :(得分:1)
刚改变了这个,它对我来说很好。尝试:
Sub rename()
Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a
i = 1
Set fso = CreateObject("Scripting.FileSystemObject")
Set fsoFolder = fso.GetFolder("C:\Users\anu\Desktop\Black")
For Each fsoSubFolder In fsoFolder.Subfolders
For Each fsoFile In fsoSubFolder.Files
strName = fsoFile.Name
strPath = Left(fsoFile.Path, Len(fsoFile.Path) - Len(strName))
a = fsoFile.Name
If ((a = "main") Or (a = "Main") Or (a = "MAIN") Or (a = "1")) Then '-----Line changed-----
fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & "Main" & ".jpg"
fso.DeleteFile strPath & strName
Else
fso.CopyFile strPath & strName, strPath & fsoSubFolder.Name & "_" & i & ".jpg"
fso.DeleteFile strPath & strName
i = i + 1
End If
Next
i = 1
Next
End Sub
答案 1 :(得分:0)
这条线很可能会给你一个问题。 (没有任何其他信息)
Dim fso, fsoFolder, fsoFile, strPath, strName, fsoSubFolder, i, a
作为最佳做法,您应养成输入所有变量的习惯,尤其是代码中需要Set
的任何对象。
相反的东西(你可能需要确认类型,因为我不确切知道它们应该是什么)
Dim fso as 'insert your object here
Dim fsoFolder as 'insert your object here
Dim fsoFile as 'insert your object here
Dim strPath as String
Dim strName as String
Dim fsoSubFolder as 'insert your object here
Dim i as Integer
Dim a as String