如何检查文件是否不存在,并使用For循环显示一个整体响应

时间:2017-12-16 02:06:30

标签: vbscript

我尝试编写一个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

2 个答案:

答案 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运行命令,因为FileExistscmd.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表示我是否没有该文件。