我有一个包含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”也没有做任何事情。
答案 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