使用VBS脚本

时间:2016-04-26 11:53:41

标签: vbscript contains string-comparison

我的脚本正在执行以下操作:

  1. 检索我选择的所有文件夹文件
  2. 按日期(从最近的一个到较旧的一个)对它们进行分类
  3. 在窗口中显示
  4. 这是我的VBS脚本(我检索它here):

        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
    

    为了按名称过滤我检索到的文件,我想添加以下条件:

    • 对于每个文件名,如果它包含&#34; average&#34;,请将文件名添加到表中
    • 否则,什么都不做

    我尝试使用

      

    如果InStr(Tableau(1,i),&#34; average&#34;,vbTextCompare)&gt; 0然后

    但它告诉我这个错误: enter image description here

1 个答案:

答案 0 :(得分:4)

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

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

InStr的签名是:

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

但问题在于它有两个可选参数,其中一个在前面,有一个特殊条件:

  

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

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

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

您看到的错误消息基本上抱怨第一个参数应该是一个整数,但是您正在为它提供一个字符串。

请参阅InStr docs