我正在尝试创建一个脚本来检查存档的事件日志文件的存在,如果存在任何文件,则将它们移动到另一个文件夹。运行此脚本不会执行任何操作并且不会出错。我相信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
答案 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中使用通配符查找文件的适当方法:
答案 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
方法!