VBA用中间的今天日期替换文件夹中的所有文件

时间:2019-07-17 16:05:58

标签: vba ms-access file-rename

我希望使用批处理文件或VBA将文件夹中所有文件中的日期替换为今天的日期。

我在这里和其他论坛上进行了搜索,发现以下内容与我想要达到的功能最接近,但是他们正在使用唯一的DateStamp格式:a link

这是该链接中的代码

var fso = new ActiveXObject("Scripting.FileSystemObject");
var folder = fso.GetFolder(".");

var files = new Enumerator(folder.Files);

while (!files.atEnd()) {
    var file = '' + files.item();
    if (/\.csv$/i.test(file)) {
        var dest = file.replace(/_Done[^\.]+/i, '');
        if (dest != file) {
            WSH.Echo('Renaming ' + file + ' -> ' + dest);
            files.item().Move(dest);
        }
    }
    files.moveNext();
}

示例1:

PLOG - (Daymon) Raritan - 2018.07.16 - (WB) OTC
--needs to be --
PLOG - (Daymon) Raritan - 2019.07.17 - (WB) OTC

示例2:

PLOG - (Flagship+) Ardo - 2019.06.03 - (FRO) Vegetables and Vegetable
--needs to be--
PLOG - (Flagship+) Ardo - 2019.07.17 - (FRO) Vegetables and Vegetable

1 个答案:

答案 0 :(得分:0)

我认为涉及fsoregex的VBA解决方案将满足要求。 (尽管无法理解递归的含义。)可能会添加引用(VBA项目窗口-工具-参考),并添加“ Microsoft脚本运行时”和“ Microsoft VBScript正则表达式...”

Sub test()
Dim fso As FileSystemObject, fld As Folder, fl As File
Dim Rg As RegExp
Set fso = CreateObject("Scripting.filesystemobject")
Set fld = fso.GetFolder("C:\users\user\desktop\Folder1") ' Modify folder name to your choice

Set Rg = CreateObject("VBScript.RegExp")
  With Rg
  .Global = True
  .Pattern = "(([\d]{4}.[\d]{2}.[\d]{2}))"

      For Each fl In fld.Files
        If .test(fl.Name) Then
        fl.Name = .Replace(fl.Name, Format(Now, "yyyy.mm.dd"))
        Else
        Debug.Print fl.Name & " Not renamed"
        End If
     Next
  End With

End Sub