loops - 在文件夹中搜索包含服务器名称和扩展名的文件,然后选择最后修改的文件,并在文件名中获取日期

标签 loops vbscript string-parsing last-modified filesystemobject

尝试使用 VBScript 来执行此操作。我有一个包含多个文件的文件夹,其中包含扩展名为 .vib 的服务器名称。所有文件显示为

servername.vm-<randomnumber><date>T<time>.vib

例如:

SERVERNAME.vm-255622016-08-31T040037.vib

我需要做的是抓取所有包含 servername*.vib 的文件,然后找到该列表中最后修改的文件,然后从该文件中提取日期。日期采用 xxxx-xx-xx 格式,并且在文件名中始终以 T 开头,并且似乎位于相同的相对位置。

到目前为止,我已经能够通过使用 this other question 获得非常接近的结果。 .

但是我在两件事上遇到了麻烦,找到只包含服务器名的文件并从文件本身获取日期。

到目前为止,这是我的代码:

Set fso = CreateObject("Scripting.FileSystemObject")

Set list = CreateObject("ADOR.Recordset")
list.Fields.Append "name", 200, 255
list.Fields.Append "date", 7
list.Open

For Each f In fso.GetFolder("J:\Files").Files
  If (fso.GetExtensionName(f) = "vib") And (fso.Contains(ServerName)) Then
    list.AddNew
    list("name").Value = f.Path
    list("date").Value = f.DateLastModified
    list.Update
  End If
Next

list.Sort = "date DESC"
list.MoveFirst
WScript.Echo list("name").Value
list.Close

如果我从 If 语句中删除 fso.Contains(ServerName),代码就会运行,我会得到最新的 vib 文件。我只是不知道如何测试文件中包含的服务器名,所以我只得到其中包含服务器名的文件。

我也被困在如何从文件本身中提取日期,无法开始弄清楚从哪里开始。

最佳答案

FileSystemObject 对象没有 Contains 方法。您可以像这样测试服务器名称的文件名:

LCase(Left(f.Name, Len(ServerName))) = LCase(ServerName)

但是,由于您还想提取日期,正则表达式可能是更好的方法:

Set re = New RegExp
re.Pattern = ServerName + "\.vm-\d+?(\d{4}-\d{2}-\d{2})T\d{6}\.vib"

有了它,您可以像这样测试服务器名称的存在:

re.Test(f.Name)

并像这样提取日期:

For Each m In re.Execute(f.Name)
  datestring = m.SubMatches(0)
Next

关于loops - 在文件夹中搜索包含服务器名称和扩展名的文件,然后选择最后修改的文件,并在文件名中获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39883975/

相关文章:

java - 大十进制解析问题

c - 避免 if in 循环

python - 在没有第一个和最后一个元素的情况下循环字典

bash - 通过命令行检查列中的数字是否连续

Windows 脚本 (VBS) 始终使应用程序保持打开状态

c# - 使用远程计算机上的 dll

c++ - 提取字符串中出现的前两个整数 C++

javascript - 时间向上计数器

java - 代码效率。使用循环的有效方法

powershell - Windows 产品 key - 来自不同技术的不同答案