Переименование файла VBScript: ошибка «Файл уже существует» - PullRequest
0 голосов
/ 05 января 2019

Файлы в папке D: \ FOLDER01:

-  NAME TEST File01 12345.txt
-  NAME TEST File02 12345.txt
-  NAME TEST File03 12345.txt
-  NAME TEST File04 12345.txt
-  NAME TEST File05 12345.txt

Как заставить этот скрипт работать?

Option Explicit
Dim fso, folder, file, recentFile, folderName

folderName = "D:\FOLDER01\"

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderName)
Set recentFile = Nothing

For Each file In folder.Files
    Set recentFile = file
    If (InStr(recentFile, "NAME TEST") > 0) Then
        recentFile.Name = Replace(recentFile.Name, "NAME TEST ", "")
        recentFile.Name = Replace(recentFile.Name, " 12345", "")
    End If
Next

Ошибка «Файл уже существует» в строке:

recentFile.Name = Replace(recentFile.Name, " 12345", "")

1 Ответ

0 голосов
/ 08 января 2019

При переименовании файлов всегда возможно, что новое имя уже существует в выходном пути. Чтобы преодолеть это, вы можете добавить порядковый номер к новому имени файла, как это делает Windows:

Option Explicit

Dim fso, folder, file, folderName, path, baseName, extension, newName, count

folderName = "D:\FOLDER01\"

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderName)

For Each file In folder.Files
    If (InStr(file.Name, "NAME TEST") > 0) Then
        path = file.ParentFolder & "\"                    'the folder this file is in
        baseName  = fso.GetBaseName(file.Name)            'the file name without extension
        extension = fso.GetExtensionName(file.Name)       'the extension without the dot
        If Len(extension) Then extension = "." & extension

        'removing the strings from the base name.
        baseName = Replace(baseName, "NAME TEST", "")
        baseName = Trim(Replace(baseName, "12345", ""))
        'the new filename with extension could be this
        newName = baseName & extension

        'to make certain this new name is unique, do the following:
        count = 1
        'test if this new name already exists and if so, append a sequence number to it "(x)"
        While fso.FileExists(path & newName)
            newName = baseName & "(" & count & ")" & extension
            count = count + 1
        Wend
        'here we should be quite certain the new name is not already in use, so update the file
        file.Name = newName
    End If
Next

Set folder = Nothing
Set fso = Nothing
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...