我尝试编写一个VBScript,根据部分号码检查文件夹中是否存在文件。如果文件夹中的任何内容在字符串中有此编号,则可以继续,如果不是,则需要显示错误,说明它不在系统中。我已经获得了一个代码,让我知道该文件存在,但我无法使用NOT版本。有任何想法吗?
Dim FSO, str1, fileName
str1 = "001234"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSO.GetFolder("C:\Users\GDoe\Desktop\FolderA\")
For Each objFile In objFolder.Files
fileName = objFile.Name
If InStr(fileName, str1) Then
MsgBox("Proceed")
Exit For
End If
Next
答案 0 :(得分:1)
不幸的是FileSystemObject
的{{3}}方法不支持通配符,所以这里不可能采用直截了当的方法。
您在问题中发布的代码基本上是如何检查是否存在具有VBScript和FileSystemObject
部分名称的文件。您可以将该代码修改为检查是否存在文件,并进行一些小的更改。在循环之前定义变量并将其设置为False
,然后在找到匹配文件时显示一个可以True
变化的消息框集:
fileFound = False
For Each objFile In objFolder.Files
fileName = objFile.Name
If InStr(fileName, str1) Then
fileFound = True
Exit For
End If
Next
If fileFound Then
MsgBox("Proceed")
Else
MsgBox("File doesn't exist.")
End If
或者,你可以弹出并检查dir
命令的退出代码:
Function FileExists(path, namepart)
Set sh = CreateObject("WScript.Shell")
rc = sh.Run("cmd /c dir ""*" & path & "\" & namepart & "*""", 0, True)
FileExists = Not CBool(rc)
End Function
dir
如果找到匹配的文件则返回0,否则返回1。 CBool()
将整数返回码转换为布尔值(0→False
,1→True
)。然后,否定将逻辑从“如果找到则为假”更正为“如果找到则为真”。
当然你也可以命名函数FileMissing
并删除否定,这样如果找不到匹配的文件,函数会返回True
。这只是代码中逻辑效果最好的问题。
请注意,您需要使用cmd /c
运行命令,因为FileExists
是cmd.exe
内置命令,而不是可执行文件。
答案 1 :(得分:0)
我实际上只是找到了回答自己问题的方法,但如果有更好的方式我也很想知道。
Dim FSO, str1, fileName
str1 = "-001239"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = FSO.GetFolder("C:\Users\GDoe\Desktop\FolderA\")
For Each objFile In objFolder.Files
fileName=objFile.Name
If InStr(fileName, str1) Then
MsgBox("Proceed")
Exit For
End If
Next
If InStr(fileName, str1) = 0 Then
MsgBox("File doesn't Exist")
End If
我采取的规则是,如果在InStr
命令中找不到string2,则返回0.设置结果= 0表示我是否没有该文件。