我希望使用批处理文件或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
答案 0 :(得分:0)
我认为涉及fso
和regex
的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