Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 在文件夹中搜索包含服务器名称和扩展名的文件,然后选择上次修改的文件,并在文件名中获取日期_Loops_Vbscript_String Parsing_Last Modified_Filesystemobject - Fatal编程技术网

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

Loops 在文件夹中搜索包含服务器名称和扩展名的文件,然后选择上次修改的文件,并在文件名中获取日期,loops,vbscript,string-parsing,last-modified,filesystemobject,Loops,Vbscript,String Parsing,Last Modified,Filesystemobject,正在尝试使用VBScript执行此操作。我有一个文件夹,其中包含多个文件,其中包括扩展名为.vib的服务器名。所有文件都显示为 servername.vm-T.vib 例如: SERVERNAME.vm-255622016-08-31T040037.vib 我需要做的是抓取所有包含servername*.vib的文件,然后找到该列表中最后修改的文件,然后从该文件中提取日期。日期采用XXXXXX格式,文件名中始终以T开头,并且似乎位于相同的相对位置 到目前为止,我已经能够通过使用非常接近 但是

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

servername.vm-T.vib
例如:

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

到目前为止,我已经能够通过使用非常接近

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

以下是我目前的代码:

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)
re.Test(f.Name)
For Each m In re.Execute(f.Name)
  datestring = m.SubMatches(0)
Next
但是,由于您还希望提取日期,因此正则表达式可能是更好的方法:

Set re = New RegExp
re.Pattern = ServerName + "\.vm-\d+?(\d{4}-\d{2}-\d{2})T\d{6}\.vib"
有了它,您可以像下面这样测试服务器名称的存在性:

LCase(Left(f.Name, Len(ServerName))) = LCase(ServerName)
re.Test(f.Name)
For Each m In re.Execute(f.Name)
  datestring = m.SubMatches(0)
Next
并按如下方式提取日期:

LCase(Left(f.Name, Len(ServerName))) = LCase(ServerName)
re.Test(f.Name)
For Each m In re.Execute(f.Name)
  datestring = m.SubMatches(0)
Next

这是最后的剧本,以防有人想要,但我已经将Ansgar的回答标记为答案

Set fso = CreateObject("Scripting.FileSystemObject")

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

DIM strServerName
strServerName = "Put_Server_Name_Here"

Set objRe = New RegExp
objRe.IgnoreCase = True
objRe.Pattern = strServerName + "\.vm-\d+?(\d{4}-\d{2}-\d{2})T\d{6}\.vib"

For Each f In fso.GetFolder("J:\Files").Files
  If (fso.GetExtensionName(f) = "vib") AND (objRe.Test(f.Name)) 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
WScript.Echo objRE.Execute(list("name").Value).Item(0).Submatches(0)

list.Close

太棒了,所以我把它和文件名测试提供的信息一起使用,我没有意识到我不能对FSO进行包含。但是我很难用你提供的信息来提取日期。在原始脚本结束时,我得到了所需的文件,并对其进行了回显。我只需要这一个文件的日期,但我不知道如何使用正则表达式从第一个列表项中获取日期。看起来我能够获取它。我使用WScript.Echo重新执行(list(“name”).Value)。项(0)。子匹配(0)