使用VBS脚本检查字符串是否包含特定字符

4
我的脚本正在执行以下步骤:
  1. 检索我选择的所有文件夹中的文件
  2. 按日期分类(从最近的到最早的)
  3. 在窗口中显示它们
这是我的VBS脚本(我在这里检索它:这里):
    Option Explicit

    Const PathMDB   = "C:\Users\C8461789\Desktop\test_script" 

    MsgBox TriRepertoire,,"Enumération " & PathMDB
    '---lister les fichiers du répertoire ---
    Function TriRepertoire()
    Dim fso, fichier, fileItem
    Dim i, imax, z, valeur, cible, liste
    Set fso = CreateObject("Scripting.FileSystemObject")

    imax = 0
    'début de l'énumération
    For Each fichier In fso.GetFolder(PathMDB).Files
    Set fileItem = fso.GetFile(fichier)

    imax = imax + 1
    ReDim Preserve Tableau(2, imax)
    Tableau(1, imax) = Fichier.Name
    Tableau(2, imax) = FileItem.DateLastModified

    '---trier les fichiers par ordre décroissant de création ---
    Do
    Valeur = 0
    For i = 1 To imax - 1
        If InStr(Tableau(1,i), "average", vbTextCompare) > 0 Then
            If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
                For z = 1 To 2
                   Cible = Tableau(z, i)
                   Tableau(z, i) = Tableau(z, i + 1)
                   Tableau(z, i + 1) = Cible
                Next
                Valeur = 1
            End If
        End If
    Next 
    Loop While Valeur = 1
    Set fileItem = nothing
    Next

    'Affichage du résultat classé
    For i = 1 To imax
    'If IsNull(Tableau) Then
        liste = liste &vbTab& Tableau(1, i) &vbCr 
    'End If
    Next
    TriRepertoire = liste

    Set fso = nothing 
    End Function

为了按名称过滤检索到的文件,我想添加以下条件:
  • 对于每个文件名,如果它包含“average”,则将文件名添加到表中
  • 否则,不做任何操作
我尝试使用以下代码:

If InStr(Tableau(1,i), "average", vbTextCompare) > 0 Then

但是它显示了这个错误:enter image description here

有趣的是,当我使用谷歌搜索 vbscript "type incompatible" "string" 时,返回的结果都与法语代码实现相关,这让我想到它可能与法语和 WScript 之间的兼容性有关。 - user692942
1
这似乎是一个类似的问题,可能会有所帮助。主题:类型不兼容:'CDbl' 800A00D(第75行) - user692942
1个回答

4

您错误地使用了 InStr。您的代码:

InStr(Tableau(1,i), "average", vbTextCompare)

InStr 的签名为:

InStr([start,]string1,string2[,compare])

但这里有个注意点,它有两个可选参数,其中一个在前面,并带有特殊条件:

可选。指定每次搜索的起始位置。默认情况下,搜索从第一个字符位置(1)开始。如果指定 compare,则此参数是必需的

因此,由于您正在使用值为 vbTextCompare 的第四个参数,您还需要在第一个参数中指定起始点,即您的情况下为 1(第一个字符)。所以,更正后的代码如下:

InStr(1, Tableau(1,i), "average", vbTextCompare)

你看到的错误信息基本上是在抱怨第一个参数应该是整数,但你却传递了一个字符串。
请参见InStr文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接