循环重命名多个文件
Renaming multiple files in a loop
我有一个包含 8 个 Excel 个文件的文件夹,其命名约定如下:
date_All_Groups
date_HRFull_Status_All
date_RME_Groups_Excluded
这些文件用于月度报告,因此日期显然总是不同的。
我将使用宏来操作每个工作表中的数据,但是由于文件名(日期)的变化我无法创建宏 - 我唯一的保证是这些文件中的每一个都肯定包含部分字符串匹配。
我有一个脚本可以在该位置找到文件并重命名文件,但它只重命名 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
我找到的原始代码与上面完全相同,但是在 For Each
循环中只有一个 If
语句,而 Exit For
在 If
语句中。
目前,当我执行脚本时,代码仅重命名一个文件,并且始终首先重命名 HR 文件。
如果我再次执行该脚本,它会从所有组开始,然后是排除的组,依此类推。
而 "Echo Completed" 也没有做任何事情。
如果文件具有相同的 "date" 你只需要为此查找,例如(如果日期是 iso 日期 "YYYYMMDD")(Date
Returns "today"日期)
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
如果您只想将文件重命名为 "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
我有一个包含 8 个 Excel 个文件的文件夹,其命名约定如下:
date_All_Groups date_HRFull_Status_All date_RME_Groups_Excluded
这些文件用于月度报告,因此日期显然总是不同的。 我将使用宏来操作每个工作表中的数据,但是由于文件名(日期)的变化我无法创建宏 - 我唯一的保证是这些文件中的每一个都肯定包含部分字符串匹配。
我有一个脚本可以在该位置找到文件并重命名文件,但它只重命名 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
我找到的原始代码与上面完全相同,但是在 For Each
循环中只有一个 If
语句,而 Exit For
在 If
语句中。
目前,当我执行脚本时,代码仅重命名一个文件,并且始终首先重命名 HR 文件。 如果我再次执行该脚本,它会从所有组开始,然后是排除的组,依此类推。
而 "Echo Completed" 也没有做任何事情。
如果文件具有相同的 "date" 你只需要为此查找,例如(如果日期是 iso 日期 "YYYYMMDD")(Date
Returns "today"日期)
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
如果您只想将文件重命名为 "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