1 (изменено: Patrik, 2011-04-21 19:51:55)

Тема: VBS & WMI: асинхронный поиск файлов

Можно выложить на VBS асинхронный поиск файлов созданный пользователем Poltergeyst  ?
Конвертирую сам, но чтото у меня не получается с функцией

function Sink_OnCompleted(iHResult, objWbemErrorObject, objWbemAsyncContext)

Выдает ошибку

Function Sink_OnObjectReady(objWbemObject, objWbemAsyncContext)
    
    On Error resume Next
    Set objItems = objShell.NameSpace(String(objWbemObject.Name)).Items()
    If Err.Number <> 0 Then
    WScript.Echo Err.Number
    End If
    
    
    '[Фильтрация элементов каталога по маске]
    '----------------------------------------------------------------
    Set fCount = objItems.Count
    If fCount = 0 Then  WScript.Echo "Выход 1" 
    'Exit Function
    End If
    
    objItems.Filter(64+128, sFilter)
    Set fCount = objItems.Count
    If fCount = 0 Then  WScript.Echo "Выход 2" 
    'Exit Function
    End If    
    '[Формирование строки путей найденных файлов]
    '----------------------------------------------------------------
    For i=0 To i<fCount
        sPath = objItems.Item(i).Path
        sFiles = sFiles + sPath + VbCrLf
        i=i+1
    Next

End Function

2

Re: VBS & WMI: асинхронный поиск файлов

Patrik пишет:

Можно выложить на VBS асинхронный поиск файлов созданный пользователем Poltergeyst  ?

Перефразируйте. Не очень понятно, что Вы хотите.

3 (изменено: Patrik, 2011-04-22 12:47:28)

Re: VBS & WMI: асинхронный поиск файлов

Можно выложить этот скрипт на VBS  ?
Пытаюсь сам переконвертировать, но не получается...

4

Re: VBS & WMI: асинхронный поиск файлов

Patrik, всё равно не понятно. Вот же оно: Серый форум / JScript & WMI: асинхронный поиск файлов, всё доступно.

P.S. Если опять не то, и Вы пришли сюда по ссылке с поисковика, то приведите эту ссылку, дабы можно было установить её происхождение и куда она попала.

5

Re: VBS & WMI: асинхронный поиск файлов

alexii, я так понял, что Patrik хочет перевести код от Poltergeyst с JS на VBS.

Patrik, Вы можете вызывать JSкод из VBS. И где вызывают трудности в переводе?

6 (изменено: Patrik, 2011-04-24 22:45:00)

Re: VBS & WMI: асинхронный поиск файлов

Совершенно верно.
Как преобразовать строку:

 var sFilter = String('*.log;*.wlg;*.err;*.bak');

на VBS ?

7

Re: VBS & WMI: асинхронный поиск файлов

Вышеприведенная строка на js избыточна, достаточно было бы написать var sFilter = '*.log;*.wlg;*.err;*.bak';

Вот перевод:


Dim sFilter
sFilter = "*.log;*.wlg;*.err;*.bak"
( 2 * b ) || ! ( 2 * b )

8

Re: VBS & WMI: асинхронный поиск файлов

Еще не понятно с функцией  function Sink_OnObjectReady(objWbemObject, objWbemAsyncContext).
Вот что у меня получилось:

Function Sink_OnObjectReady(objWbemObject, objWbemAsyncContext)
     On Error resume Next
     objItems = objShell.NameSpace(objWbemObject.Name).Items()
    
    '[Фильтрация элементов каталога по маске]
    '----------------------------------------------------------------
    fCount = objItems.Count
    If fCount = 0 Then  'Exit Function 
    End If
    Exit Function
    
    objItems.Filter 64+128, sFilter
    
    fCount = objItems.Count
    If fCount = 0 Then  'Exit Function 
    End If
    Exit Function    
    '[Формирование строки путей найденных файлов]
    '----------------------------------------------------------------
    For i=0 To i<fCount
        sPath = objItems.Item(i).Path
        sFiles = sFiles + sPath
        i=i+1
    Next

End Function

Где у меня ошибка?

9

Re: VBS & WMI: асинхронный поиск файлов


    If fCount = 0 Then  'Exit Function 
    End If
    Exit Function
    
    objItems.Filter 64+128, sFilter
    
    fCount = objItems.Count
    If fCount = 0 Then  'Exit Function 
    End If
    Exit Function

Исправьте на


    If fCount = 0 Then
        Exit Function 
    End If
    
    objItems.Filter 64+128, sFilter
    
    fCount = objItems.Count
    If fCount = 0 Then
        Exit Function 
    End If
( 2 * b ) || ! ( 2 * b )

10

Re: VBS & WMI: асинхронный поиск файлов

Вот что у меня вышло, но этот код не работает

Dim sFilter, fCount, objItems, sFiles, sPath
Dim objShell, objWMI, objSink, f
sFilter = "*.log;*.bak"
sFiles = Array()

Set objShell = CreateObject("Shell.Application")
Set objWMI = GetObject("winmgmts:\\.\Root\CIMV2")
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink", "Sink_")

'[Выполнение асинхронного запроса] 
objWMI.ExecQueryAsync objSink, "SELECT * FROM Win32_Directory"

'цикл ожидания, пока выполнится запрос
f = false
While Not bdone
    WScript.Sleep 100
Wend

WScript.Echo "Finished"
objSink.Cancel
Set objSink = Nothing
Set objWMI = Nothing
Set objShell = Nothing
WScript.Quit

'[Обнаружение экземпляра объекта (каталога)]
'------------------------------------------------------------------------
Function Sink_OnObjectReady(objWbemObject, objWbemAsyncContext)
    
    On Error resume Next
    objItems = objShell.NameSpace(objWbemObject.Name).Items()
    If Err.Number <> 0 Then  'Exit Function
    WScript.Echo Err.Number
    End If

    '[Фильтрация элементов каталога по маске]
    '----------------------------------------------------------------
    fCount = objItems.Count
    If fCount = 0 Then
    Exit Function 
    End If
    
    objItems.Filter 192, sFilter
    
    fCount = objItems.Count
    If fCount = 0 Then  
    Exit Function 
    End If    
    '[Формирование строки путей найденных файлов]
    '----------------------------------------------------------------
    For i = 0 to fCount -1
        sPath = objItems.Item(i).Path
        sFiles = sFiles + sPath
    Next

End Function

'[Завершение запроса]
'------------------------------------------------------------------------
Function Sink_OnCompleted(iHResult, objWbemErrorObject, objWbemAsyncContext)
    f = true  'флаг завершения запроса
    If UBound(sFiles) = -1 Then
        WScript.Echo "--Ничего не найдено--"
    Else
        WScript.Echo "Найденные файлы: " & VbCrLf & sFiles
    End If
End Function