我想在使用此脚本移动文件后访问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
答案 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