我正在使用客户端的平面文件夹结构,该文件夹结构包含一个包含45k子文件夹的文件夹,其中包含8位数的文件夹名称,例如51023231
。我有一个小脚本,通过它们涟漪并将它们复制到网络上其他地方的一个bin分类的子文件夹集合(用于SharePoint),这样前5个数字用作父文件夹,即{{{{ 1}}被复制到51023231
。它工作得非常好,在处理新目的地的文件夹时,我设法进行了一些适度的优化。
然而,在文件夹比较中运行整个45k文件夹可能需要一个小时左右,我想知道是否可以运行系统级查询以仅返回其文件夹的初始列表修改日期在给定点之后,然后在其上运行现有脚本。我已经完成了通常的Google-is-your-friend类型的拖网,并且继续使用WMI来实现这一目标,但我不会做得更远。这是因为VBScript根本无法实现吗?
感激地收到任何指示。
答案 0 :(得分:1)
VBScript 使用 WMI是可能的。如果这是您所暗示的,那么使用FileSystemObject
并不是您能够做到的事情。
您可以查询WMI的Win32_Directory
类,按修改日期过滤文件夹。唯一棘手的部分是WMI使用的datetime
格式。但是SWbemDateTime
类可以将VBScript日期转换为datetime
值。
以下是一个例子:
' Create a datetime value for use in our WMI query...
Dim dt
Set dt = CreateObject("WbemScripting.SWbemDateTime")
dt.SetVarDate DateSerial(2015, 8, 31)
Dim objWMI
Set objWMI = GetObject("winmgmts:\\.\root\cimv2")
' Find all subfolders of 'c:\some\path' that were modified > 2015/08/31
Dim objFolders
Set objFolders = objWMI.ExecQuery("select * from Win32_Directory" _
& " where Drive='C:' and Path='\\some\\path\\' and LastModified>'" & dt & "'")
Dim objFolder
For Each objFolder in objFolders
WScript.Echo objFolder.Name
Next