迭代预过滤的文件夹列表

Iterate over pre-filtered list of folders

我正在使用一个客户端的平面文件夹结构,该结构有一个文件夹,其中包含 45k 个具有 8 位文件夹名称的子文件夹,例如51023231。我有一个小脚本,通过它们传播并将它们复制到网络上其他地方的一组按 bin 排序的子文件夹(用于 SharePoint),这样前 5 位数字用作父文件夹,即 [= 的内容10=] 被复制到 51023023231。它运行良好,在处理目的地的新文件夹时我已经设法进行了一些适度的优化。

但是,运行 对整个 45k 文件夹集进行逐个文件夹比较可能需要一个小时左右,我想知道是否可以 运行 系统级仅查询 return 修改日期在给定点之后的初始文件夹列表,然后 运行 现有脚本。我已经完成了通常的 Google-is-your-friend 类型的拖网,并不断提出使用 WMI 来执行此操作的想法,但我没有进一步了解。这是因为 VBScript 根本不可能吗?

如有指点,不胜感激。

可以使用 VBScript 使用 WMI。这不是你可以使用 FileSystemObject 做的事情,如果那是你的意思的话。

您可以查询 WMI 的 Win32_Directory class 以按修改日期过滤文件夹。唯一棘手的部分是 WMI 使用的 datetime 格式。但是 SWbemDateTime class 可以将 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