在循环中重命名多个文件

时间:2018-02-01 13:44:37

标签: vbscript renaming

我有一个包含8个Excel文件的文件夹,其中包含以下命名约定:

date_All_Groups
date_HRFull_Status_All
date_RME_Groups_Excluded

这些文件用于月度报告,因此日期显然总是不同的。 我将使用宏来操作每个工作表中的数据,但由于更改文件名(日期),我无法创建宏 - 我唯一的保证是这些文件中的每一个都将确定包含部分字符串匹配。 / p>

我有一个脚本可以找到该位置的文件并重命名该文件,但它只重命名1个文件,而不是文件夹中的第一个文件。

我的问题是有效地使用For Each循环。

这是我的代码:

Dim fso, folder, file
Dim folderName, searchFileName, renameFile1, renameFile2, renameFile3, renameFile4, renameFile5, renameFile6, renameFile7, renameFile8

'Path
folderName = "C:\test\"

'Future FileName
renameFile1 = "All Groups.csv"
renameFile2 = "Groups Excluded.csv"
renameFile3 = "No Exclusions.csv"
renameFile4 = "HR.csv"
renameFile5 = "AD Users.csv"
renameFile6 = "Encryption Status.csv"
renameFile7 = "ePO4 Not Encrypted.csv"
renameFile8 = "ePO5 Not Encrypted.csv"

' Create filesystem object and the folder object
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(folderName)

' Loop over all files in the folder until the searchFileName is found
For Each file In folder.Files
    ' See If the file starts with the name we search
    If InStr(file.Name, "All_Groups") then
        file.Name = renameFile1
    End If

    If InStr(file.Name, "Groups_Excluded") Then
        file.Name = renameFile2
    End If

    If InStr(file.Name, "No_Exclusions") Then
        file.Name = renameFile3
    End If

    If InStr(file.Name, "HR") Then
        file.Name = renameFile4
    End If

    If InStr(file.Name, "AD_Users") then
        file.Name = renameFile5
    End If

    If InStr(file.Name, "Encryption_Status") then
        file.Name = renameFile6
    End If

    If InStr(file.Name, "ePO4") then
        file.Name = renameFile7
    End If

    If InStr(file.Name, "ePO5") then
        file.Name = renameFile8
    End If

    Exit For

    ' echo the job is completed
    WScript.Echo "Completed!"
Next

我找到的原始代码与上面完全相同,但If循环中只有一个For Each语句,而Exit For语句中只有If

目前,当我执行脚本时,代码只重命名一个文件,而且它始终是HR文件。 如果我再次执行脚本,则它将以所有组开始,然后以组排除开始,依此类推。

“Echo Completed”也没有做任何事情。

2 个答案:

答案 0 :(得分:1)

如果您只是想将文件重命名为" canonical"你可以做这样的名字,假设你只想删除文件名开头的日期,并用空格替换下划线:

Set re = New RegExp
re.Pattern = "\d{4}-\d{2}-\d{2}_(.*\.csv)"

For Each f In folder.Files
    For Each m In re.Execute(f.Name)
        f.Name = Replace(m.Submatches(0), "_", " ")
    Next
Next

答案 1 :(得分:0)

如果文件具有相同的“日期”,则只需要查找,例如(如果日期是iso日期“YYYYMMDD”)(Date返回“今天”日期)

IsoDate=CStr(Year(Date)) & Right("0" & CStr(Month(Date)),2) & Right("0" & CStr(Day(Date)),2)

以及每个人:

For Each file In folder.Files
    If InStr(file.Name, IsoDate) = 1 then 'if is in the start of the string
        file.Name = Mid(file.Name, Len(IsoDate)+1) 'The same name with out date
    End IF
Next