VBA Изменение имени всех файлов в папке - PullRequest
0 голосов
/ 10 марта 2019

В папке у меня есть несколько изображений с именами, например, 1; 2; 3; 4; 5; 6, и мне нужно изменить имя каждого из них следующим образом:

1 станет 6/2 станет 5/ 3 становится 4 ... и т. Д.

. Этот пример работает с 6 изображениями, но у меня может быть гораздо больше.

Я начинаю работу по циклической обработке всех файлов в каталоге

Sub LoopThroughFiles()
Dim StrFile As String
StrFile = Dir("c:\xxx\*test*")
Do While Len(StrFile) > 0
    Debug.Print StrFile
    StrFile = Dir
Loop
End Sub

Возможно, мне потребуется скопировать их в другую папку, потому что я не могу назвать файл 6, если он уже есть?

Спасибо за помощь

Ответы [ 2 ]

1 голос
/ 10 марта 2019

Вы можете использовать это:

Public Sub SwapFiles()
    Dim folderPath As String
    Dim fileCount As Long

    folderPath = "c:\xxx" ' folder path to search files into

    With CreateObject("Scripting.FileSystemObject")
        For fileCount = 1 To 3
            .CopyFile folderPath & "\" & fileCount & ".jpg", folderPath & "\" & "temp.jpg"
            .CopyFile folderPath & "\" & (6 - fileCount + 1) & ".jpg", folderPath & "\" & fileCount & ".jpg"
            .CopyFile folderPath & "\" & "temp.jpg", folderPath & "\" & (6 - fileCount + 1) & ".jpg"
        Next
    End With
End Sub

просто измените "jpg" на ваше фактическое расширение файлов изображений

1 голос
/ 10 марта 2019

Вы не можете переименовать файл «1» в «6», если «6» все еще там, поэтому нам нужно сначала переименовать каждый файл во временное имя. По этой причине мы зацикливаем все файлы в папке дважды. Обратите внимание, что файлы должны иметь только именованные номера (плюс расширение), иначе код не будет выполнен. Сделайте резервную копию ваших изображений перед запуском скрипта.

Public Sub rename_all_files_in_folder(folderPath As String)

'''   for this code to work, Microsoft Scripting Runtime reference is required (Tools -> References)
Const temp_filename_prefix As String = "to_be_renamed_"
Dim fso As Scripting.FileSystemObject
Dim f As Scripting.file
Dim fileCount As Integer
Dim newFilename As String
Dim extension As String

Set fso = New FileSystemObject

fileCount = 0
If fso.FolderExists(folderPath) Then

    '''   first cycle, each file gets temporary name
    For Each f In fso.GetFolder(folderPath).Files
        fileCount = fileCount + 1
        'fso.FindFileInFolder = f.Name
        f.Name = temp_filename_prefix & f.Name
    Next f

    '''   second cycle to rename from temporary name to new name
    For Each f In fso.GetFolder(folderPath).Files
        extension = "." & fso.GetExtensionName(f.path)
        newFilename = CStr(fileCount + 1 - CInt(Replace(Replace(f.Name, temp_filename_prefix, ""), extension, ""))) & extension
        f.Name = newFilename
    Next f
Else
    MsgBox "Folder not found:" & vbCrLf & folderPath
End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...