Поздний ответ, но может быть полезен, потому что, по-видимому, никто не заметил ошибку.
Из документации VBScript (script56.chm
в моем случае) на странице справки для метода CopyFile
говорится:
Метод FileExists
Возвращает True, если указанный файл существует; False, если это не так.
object.FileExists(filespec)
Аргументы
объект
Необходимый. Всегда имя FileSystemObject.
спецификация файла
Необходимый. Имя файла, существование которого необходимо определить. Полный путь (абсолютный или относительный) должен быть указан, если файл не должен существовать в текущей папке.
Следовательно, ваше выражение fso.FileExists("d:\eventlogs\Archive*.evtx")
возвращает здесь False; действительно, в вашей папке нет файла с именем Archive*.evtx
.
Либо вы удалите свой тест, но вам придется иметь дело с ошибкой, которую может сгенерировать метод CopyFile
, как говорит документ:
Ошибка также возникает, если источник, использующий подстановочные знаки, не соответствует ни одному файлу.
Как было предложено @automatedchaos в его ответе https://stackoverflow.com/a/20907209/666414, вы также можете выполнить цикл файлы папки и решите, что делать, когда имя файла/расширение соответствует вашему шаблону.
Наконец, вы можете комбинировать оба решения: перебрать файлы в папке, затем установить флаг True и Exit Loop
, как только вы обнаружите ожидаемый файл, а затем использовать метод CopyFile
.
Так:
With CreateObject("Scripting.FileSystemObject")
For Each objFile in .GetFolder("d:\eventlogs\").Files
If Left(objFile.Name, 7) = "Archive" And .GetExtensionName(objFile) = "evtx" Then
archiveFound = True
End If
Next
If archiveFound Then
.CopyFile "d:\eventlogs\Archive*.evtx", "d:\eventlogs\archive\"
.DeleteFile "d:\eventlogs\Archive*.evtx"
End If
End With
Обратите внимание, что подстановочные знаки работают и с методом DeleteFile
!
person
maxxyme
schedule
02.07.2019
VBScript
, когдаDOS
пакетные файлы могут сделать вышеперечисленное проще? - person Stephen Quan   schedule 03.01.2014