Коллекция хранения VBScript, полученная в результате регулярного выражения, сопоставляющего коллекцию файлов с массивом - PullRequest
0 голосов
/ 19 марта 2012

Я хочу получить доступ к результатам RegEx после завершения перемещения файлов с помощью этого сценария. (Например: я хочу позже отправить имена файлов, которые соответствуют шаблону регулярных выражений, на мой E-mail)

Проблема: невозможно использовать «objFile.Name» вне исходного цикла перемещения файлов, который я получаю во время регулярного выражения. Это должно было быть возможно с помощью метода «Execute» для RegEx, но, к сожалению, я не могу заставить его работать с коллекцией, полученной из «GetFolder (). Files», он работает только для отдельных строк.

Изначально у меня работал только метод Test, и он нормально работает при начальном перемещении файла, но затем я получаю ошибки времени выполнения, когда не могу получить доступ к объекту "objFile" позже.

Моя последняя попытка записать полученные совпадения в массив также не работает, ошибка:

Строка 26, 3

Объект не поддерживает это свойство или метод:

SubMatches '

Вот последняя попытка заставить этот код работать:

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 Ответ

1 голос
/ 19 марта 2012

Я думаю, что проблема здесь в том, что (1) у вас нет никаких подсовпадений - подспаривание происходит всякий раз, когда у вас есть что-то, что соответствует выражению в скобках в вашем шаблоне (у вас нет любые круглые скобки в вашем шаблоне) - и (2) вы пытаетесь сослаться на коллекцию SubMatches в объекте objFile, а не на объект 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...