1 (изменено: SergeyA, 2012-04-07 08:09:51)

Тема: VBScript: Поиск файлов по маске на диске

Облазил интернет, но так и не нашёл примера для поиска файлов по маске в подкаталогах, требуется чтоб функция искала все файлы например по маскам "*.txt;*mp3" или даже так "age*.*;*.mp*" на выбранном диске, например "E:", пусть даже скоростью не обладает, главное чтоб работала, как такое можно соорудить?

2

Re: VBScript: Поиск файлов по маске на диске

SergeyA, добавьте префикс языка в заголовок темы и поищите ещё раз по этому форуму по ключевой фразе «поиск по маске». Я нашёл.

3

Re: VBScript: Поиск файлов по маске на диске

Я искал и не нашёл примера везде производится поиск такого типа "test.txt" или "*.txt" но множественной маски нет либо нет поиска в подкаталогах, может ошибаюсь и пропустил, да и Google мне не помог, поэтому обратился к вам.

4

Re: VBScript: Поиск файлов по маске на диске

Не верю: WSH: Поиск файлов по маске на сервере.

5

Re: VBScript: Поиск файлов по маске на диске

Пропустил, не знал что сервер это и есть ПК, спасибо.:)

6 (изменено: SergeyA, 2012-04-07 09:02:41)

Re: VBScript: Поиск файлов по маске на диске

Этот пример ищет только по расширениям , а что если я не знаю расширения но знаю часть имени файла например "tem*.*" - так он выводит результат 0

Хотел спросить, можно ли вкладывать Sub в Function то есть:

Function xxx()
    Sub yyy()
    End Sub
End Function

Ведь можно же как - то использовать CMD ищет мгновенно


@Echo Off
CHCP 1251
DIR /B /S C:\*.txt;C:\*.jpg /A-D > log.txt
Pause

7

Re: VBScript: Поиск файлов по маске на диске

SergeyA пишет:

Этот пример … - так он выводит результат 0

Какой именно пример? А лучше всего — приведите используемый Вами код.

SergeyA пишет:

Ведь можно же как - то использовать CMD ищет мгновенно

Не мгновенно, но можно: JScript: поиск файлов по расширению.

8

Re: VBScript: Поиск файлов по маске на диске

Вот этим пользуюсь:


Dim fso,mySet,myDir,st
Dim s()
i=0

Dim regEx, Match, Matches, regtxt
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True

mySet="*.fb2 *.bin *.cue" ' Список расширений, которые ищутся

For Each m1 in Split(mySet," ",-1,1)
    regtxt = regtxt & "\." & m1 & "$|"
Next
regEx.Pattern = Left(regtxt, Len(regtxt)-1)

myDir="c:\123" ' Путь для поиска

Set fso = CreateObject("Scripting.FileSystemObject")

Sub ListFolder(curDir)
On Error Resume Next
    For Each f1 in fso.GetFolder(curDir).Files
    If Err.Number = 0 Then
            If regEx.Test(f1) Then
                ReDim Preserve s(i+1)
                s(i) = f1.path
                i=i+1
            End If
    End If
    Next
Err.Clear
    For Each s1 in fso.GetFolder(curDir).SubFolders
        If Err.Number = 0 Then
            ListFolder(s1.path)
        End If
    Next
Err.Clear
On Error Goto 0
End Sub

ListFolder(myDir)

For k=0 To i-1
    If Len("Количество файлов: " & i & vbCrLf & st & k+1 & ") " & s(k) & vbCrLf)<1000 Then
        st=st & k+1 & ") " & s(k) & vbCrLf
    Else
        MsgBox "Количество файлов: " & i & vbCrLf & st
        st=k+1 & ") " & s(k) & vbCrLf
    End If
Next
 
MsgBox "Количество файлов: " & i & vbCrLf & st

9

Re: VBScript: Поиск файлов по маске на диске

Пользуйтесь этим или, как писал выше, смотрите это: JScript: поиск файлов по расширению.

10 (изменено: SergeyA, 2012-04-07 10:19:50)

Re: VBScript: Поиск файлов по маске на диске

Решил сделать так:


Dim oWSH, oExec
Set oWSH = CreateObject("WScript.Shell")
Set oExec = oWSH.Exec("%COMSPEC% /C chcp 1251 && DIR /B /S C:\h*.exe /A-D && Exit")
MsgBox oExec.StdOut.ReadAll

Но совсем не радует появление CMD окна, можно сделать через метод Run, но я не знаю как извлечь данные без создания промежуточного файла, да и ещё проблема здесь с кодировкой, вроде всё правильно а выводит русские символы в Dos кодировке.

Вот другой вариант, но опять же мешает окно CMD


Set oWSH = WScript.CreateObject("WScript.Shell")
Set oExec = oWSH.Exec("cmd")
With oExec.StdIn
    .WriteLine "chcp 1251"
    .WriteLine "DIR /B /S C:\h*.exe /A-D"
    .WriteLine "Exit"
End With

'MsgBox oExec.StdOut.ReadAll

Line = Split(oExec.StdOut.ReadAll, vbCrlf, -1, 1)
For i = 7 to UBound(Line) -3
    MsgBox Line(i)
Next

11 (изменено: Flasher, 2012-04-08 08:33:59)

Re: VBScript: Поиск файлов по маске на диске

SergeyA
Я таким методом обычно пользуюсь. Странно, что никто не подсказал. А поиск только для подсчёта нужен или для каких иных целей?

P.S. А для консольных окон есть несколько программ-скрывалок (chp, hstart, ConsoleTool, cmdow и т.д.)
Ну, и для поиска на всякий случай - консольная Everything.

12

Re: VBScript: Поиск файлов по маске на диске

Спасибо, помог, мне не для подсчёта, для быстрого поиска файлов по маске, например найти все *.jpg на диске E:\ добавить их все в архив и удалить

13

Re: VBScript: Поиск файлов по маске на диске

SergeyA, для этого их не нужно искать — достаточно задать параметр рекурсивного просмотра в командной строке при создании архива.