2016-04-26 21 views
3

我的腳本執行以下操作點的特定字符:檢查字符串包含採用VBS腳本

  1. 檢索所有我選擇的文件夾中的文件
  2. 他們班按日期(從最近一個較舊)
  3. 顯示他們在一個窗口

這裏是我的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 

爲了通過名稱來過濾我恢復的文件,我想補充以下條件:

  • 對於每個文件名,如果它包含「平均」,添加文件名錶
  • 否則,什麼都不做

我試圖用

如果InStr函數(的Tableau(1,1), 「平均」,vbTextCompare)> 0,則

但它表明我這個錯誤: enter image description here

+0

有趣的是,當我谷歌['vbscript「type incompatible」「string」'](https://www.google.com/search?safe=off&q=vbscript%20%22type%20incompatible%22%20%22string% 22&rct = j)返回的結果都與法語代碼實現有關,這使我認爲這與法語和WScript之間的兼容性有關。 – Lankymart

+1

這看起來是一個類似的問題可能會有所幫助。 [主題:type incompatible:'CDbl'800A00D(line 75)](http://forum.forensit。COM/forum_posts.asp?TID = 371)。 – Lankymart

回答

3

您正在使用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

+1

Doh錯過了,趕上! – Lankymart