VBScript使用通配符移动文件(如果存在)

时间:2014-01-03 14:31:10

标签: vbscript wildcard file-exists

我正在尝试创建一个脚本来检查存档的事件日志文件的存在,如果存在任何文件,则将它们移动到另一个文件夹。运行此脚本不会执行任何操作并且不会出错。我相信If语句中的通配符是给我带来问题的。我是vbscript的新手,也是一般的脚本,并希望得到一些建议。

Set fso = CreateObject("Scripting.FileSystemObject")
If (fso.FileExists("d:\eventlogs\Archive*.evtx")) Then
    FSO.CopyFile "d:\eventlogs\Archive*.evtx" , "d:\eventlogs\archive\"
    FSO.Deletefile "d:\eventlogs\archive*.evtx"
End if

3 个答案:

答案 0 :(得分:4)

您可以使用instr()right()的组合复制通配符搜索,也可以只复制多个instr()

Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "d:\eventlogs\"

Set objFolder = objFSO.GetFolder(objStartFolder)

Set colFiles = objFolder.Files
For Each objFile in colFiles
   if instr(objFile.Name,"Archive") <> 0 AND instr(objFile.Name,".evtx") <> 0 then
       objFSO.MoveFile objFile.Name, "archive\" + objFile.Name
   end if
Next

答案 1 :(得分:2)

在VBScript中使用通配符查找文件的适当方法:

  1. 从包含文件夹
  2. 获取文件集合
  3. 对于filecollection中的每个文件:
  4. 使用特定模式的正则表达式测试文件名
  5. 如果测试通过,请使用此文件执行某些操作
  6. 下一个文件

答案 2 :(得分:0)

最新答案,但可能有用,因为显然没有人发现错误。

根据VBScript文档(在我的情况下为script56.chm),CopyFile方法的帮助页面显示:

  

FileExists方法

     

如果指定的文件存在,则返回错误(如果确实如此)   不是。

     

object.FileExists(filespec)

     

参数

     

对象

     

必需的。始终是 FileSystemObject 的名称。

     

filespec

     

必需的。要确定其存在的文件的名称。如果预计当前文件夹中不存在该文件,则必须提供完整的路径说明(绝对路径或相对路径)。

因此,表达式fso.FileExists("d:\eventlogs\Archive*.evtx")在此处返回 False ;确实,您的文件夹中没有名为Archive*.evtx的文件。

要么删除测试,要么必须处理CopyFile方法可能产生的错误,如文档所述:

  

如果使用通配符的源与任何文件都不匹配,也会发生错误。

如@automatedchaos在其回答https://stackoverflow.com/a/20907209/666414中所建议的那样,您还可以循环浏览文件夹的文件,并决定只要文件名/扩展名与您的模式匹配,该怎么做。

最后,您可以混合使用两种解决方案:循环浏览文件夹的文件,然后在遇到预期文件时立即将标志设置为 True Exit Loop,然后使用{ {1}}方法。

赞:

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 方法!