vba – 循环和重命名文件和文件夹

我正在尝试重命名一个文件夹如何有很多子文件夹和文件内的主文件夹重命名是基于许多值和它的需要是dynamic的(我正在改变电影和字幕名称)

我的问题是 – 当文件夹名称回答名称更改的值macros无法find一个path来继续循环(如果文件夹不回答价值,那么macros工作正常)

在这里我到目前为止:

Sub moviestest() Call VideoLibrary("C:\movies") End Sub Private Sub VideoLibrary(path As String) Dim fso As New Scripting.FileSystemObject Dim fld As folder, f As folder, fl As File Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(path) For Each Q In Range("Qname") For Each fl In fld.Files myMovie = fl.Name extension = InStrRev(myMovie, ".") myNewMovie = _ Replace( _ Replace( _ Replace( _ Replace( _ Left(myMovie, extension - 1), _ ".", " "), _ "-", " "), _ "_", " "), _ Q, "") & _ Mid(myMovie, extension) fso.MoveFile myMovie, myNewMovie Next Next For Each f In fld.SubFolders Call VideoLibrary(f.path) Next End Sub 

文件名称看起来像这样:

  • The.omething.2013.1080p.BluRay.x264.YIFY.mkv The.something.2013.1080p.BluRay.x264.YIFY.sub Zero.something.2016.1080p.BluRay.x264- [YTS.AG] .avi(还有更多名)

Qname范围是这样的:(在Excel中命名的范围)

  bdrip x264 veto heb BRRip XviD AC3 EVO blaa 1080p BluRay YIFY 

这是我第一次在这个论坛上提问。 我希望我尽可能清楚我的问题,任何帮助将不胜感激

最好的办法是做一个函数,将返回新的名称。 这也将使代码更容易阅读,修改和debugging。

 Sub moviestest() Call VideoLibrary("C:\movies") End Sub Private Sub VideoLibrary(path As String) Dim fso As New Scripting.FileSystemObject Dim fld As folder, f As folder, fl As File Set fso = CreateObject("Scripting.FileSystemObject") Set fld = fso.GetFolder(path) For Each fl In fld.Files fso.MoveFile fl.path, fl.ParentFolder & "\" & getNewMoiveName(fl.Name) Next For Each f In fld.SubFolders Call VideoLibrary(f.path) Next End Sub Function getNewMoiveName(myMovie As String) As String Dim Q Dim loc As Long Dim extension As String loc = InStrRev(myMovie, ".") extension = Right(myMovie, Len(myMovie) - loc) myMovie = Left(myMovie, loc - 1) myMovie = Replace(myMovie, ".", " ") myMovie = Replace(myMovie, "-", " ") For Each Q In Range("Qname") myMovie = Replace(myMovie, Q, "") Next getNewMoiveName = myMovie & "." & extension End Function