VBScript存储由正则表达式匹配文件集合到数组中的集合

时间:2012-03-19 16:35:43

标签: collections vbscript

我想在使用此脚本移动文件后访问RegEx结果。 (例如:我想稍后将匹配正则表达式的文件名发送到我的电子邮件中)

问题是:在正则表达式中我得到的初始文件移动循环之外不能使用“objFile.Name”。这应该可以使用RegEx的“Execute”方法,但遗憾的是我无法使用它来处理由“GetFolder()。Files”产生的集合,它只适用于单个字符串。

最初只有Test方法适用于我,并且它适用于初始文件移动,但是当我以后无法访问“objFile”对象时,我会遇到运行时错误。

我尝试将结果匹配写入数组的最新尝试也不起作用,错误是:

第26,3行

对象不支持此属性或方法:

'子匹配'

以下是使此代码正常运行的最新尝试:

Set objFS = CreateObject("Scripting.FileSystemObject")

strDumpStorageDir = "C:\"

strShareDirectory = "E:\"

Set objFolder = objFS.GetFolder(strShareDirectory)
Set colFiles = objFolder.Files


Set re = New RegExp
re.Global     = True
re.IgnoreCase = False
re.Pattern    = "fs"

Dim matches()
Dim i: i = 0

For Each objFile in colFiles

 bMatch = re.Test(objFile.Name)
   If bMatch Then
    objFS.MoveFile strShareDirectory & objFile.Name , strDumpStorageDir
   End If
  ReDim preserve matches(i)
  Matches(i) = objFile.SubMatches(0)
  i = (i + 1)


Next

   For i = 0 to uBound(Matches)
   wscript.echo Matches(i)
Next



WScript.Quit

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是(1)你没有任何submatches - 只要你的模式中有一个与括号表达式相匹配的东西就会出现一个子匹配(你没有任何括号)在你的模式中) - 和(2)你试图在objFile对象中引用SubMatches集合,而不是Matches对象。

此处编辑的代码应存储您在Matches()数组中匹配的每个文件的完整路径。

Set objFS = CreateObject("Scripting.FileSystemObject")

strDumpStorageDir = "C:\"

strShareDirectory = "E:\"

Set objFolder = objFS.GetFolder(strShareDirectory)
Set colFiles = objFolder.Files


Set re = New RegExp
re.Global     = True
re.IgnoreCase = False
re.Pattern    = "fs"

Dim matches()
Dim curFile
Dim i: i = 0

For Each objFile in colFiles
    bMatch = re.Test(objFile.Name)
    curFile = objFile.Name
    If bMatch Then
        'objFS.MoveFile strShareDirectory & objFile.Name , strDumpStorageDir
        ReDim preserve matches(i)
        Matches(i) = curFile
        i = (i + 1)
    End If
Next

For i = 0 to uBound(Matches)
   wscript.echo Matches(i)
Next

WScript.Quit