Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] @WorkingDir:> find(pro) [not exe] *.* (http://forum.oszone.net/showthread.php?t=145023)

semiono 13-07-2009 21:28 1166753

@WorkingDir:> find(pro) [not exe] *.*
 
Нужна "утилита" скрипт, чтобы искать по маске, однако действие обратное!
Иными словами, чтоб задавать паттерн - найти все НЕ {txt или exe или pdf или zip итп.} файлы в текущей директории.
?

ЗЫ очень удобно проверить подкаталоги содеражащие определённый контент, скажем только *.zip на наличие
какого либо случайного мусора, типа всяких *.nfo или *.bak или ещё чего *.~ итд.

Yashied 13-07-2009 22:20 1166801

Способ 1. FileFindFirstFile() и FileFindNextFile()
Способ 2. _FileListToArray($sPath, '*', 1), затем удали из массива ненужные.

proxy 13-07-2009 23:13 1166840

Цитата:

Цитата Yashied
Способ 1. FileFindFirstFile() и FileFindNextFile()
Способ 2. _FileListToArray($sPath, '*', 1), затем удали из массива ненужные. »

а заме потом? сразу в ходе действия - заностить в массив только нужные.
вернее если тип файла не нужный - то не заносить.

И пример, с перебором подпапок:
читать дальше »


Код:

#region: - Options
    Opt('GUIOnEventMode',      1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        0)
    Opt('TrayIconHide',        1)
#endregion

#region: - Include

    #include <Array.au3>
    #include <GuiEdit.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
#endregion

Local $sSerchInDirPath      = 'd:\Обмен'
Local $sFilesSerchRegMask  = '.*'
Local $sNoFilesSerchRegMask = '(?i)txt|lnk|jpg|exe|pdf|zip'
Local $sDirsSerchRegMask    = '.*'
Local $aSubResultList      = _GetFilesDirsList($sSerchInDirPath, $sFilesSerchRegMask, $sNoFilesSerchRegMask, $sDirsSerchRegMask, 1, 1, 0)

_ArrayDisplay($aSubResultList, 'Result list')

Func _GetFilesDirsList($sSerchInDirPath, $sFilesSerchRegMask='.*', $sNoFilesSerchRegMask='', $sDirsSerchRegMask='.*', $iAddFiles=1, $iAddDirs=0, $fSerchInWrongDir=1, $sRootPath=1, $fAddFromRootDir=1)
    $sSerchInDirPath = StringRegExpReplace($sSerchInDirPath, '\\+$', '')
    Local  $aResultList[1], $aSubResultList[1], $aSub2ResultList[1], $hSerch, $sFileName, $sFilePath, $fAddToResult, $fIsDir, $fDirsSerchRegMask, $fFilesSerchRegMask, $fSerchInWrongDirSub, $fAddFromRootDirSub, $i
            $aResultList
[0] = 0

    $hSerch = FileFindFirstFile($sSerchInDirPath & '\' & '*')
    If @error Then Return SetError(1, 0, $aResultList)

    If $sRootPath == 1 AND $iAddDirs == 1 AND $fAddFromRootDir Then
        $aResultList[0] += 1
        ReDim $aResultList[$aResultList[0]+1]
        $aResultList[$aResultList[0]] = $sSerchInDirPath
    EndIf

    While
1
        $sFileName = FileFindNextFile($hSerch)
        If @error == 1 Then ExitLoop

        $sFilePath = $sSerchInDirPath & '\' & $sFileName

        $fAddToResult
= 0
        $fIsDir = StringInStr(FileGetAttrib($sFilePath), 'D')
        $fDirsSerchRegMask  = StringRegExp(StringRegExpReplace($sFilePath, '.+\\(.+)$', '\1'), $sDirsSerchRegMask)
        $fFilesSerchRegMask = StringRegExp(StringRegExpReplace($sFilePath, '.+\\(.+)$', '\1'), $sFilesSerchRegMask)
        If $fFilesSerchRegMask Then _
            $fFilesSerchRegMask = NOT StringRegExp(StringRegExpReplace($sFilePath, '.+\\(.+)$', '\1'), $sNoFilesSerchRegMask)

        $fAddFromRootDirSub  = 1
        If NOT $fDirsSerchRegMask Then $fAddFromRootDirSub = 0

        If $fIsDir Then
            If
$iAddDirs == 1  AND $fDirsSerchRegMask Then $fAddToResult = 1
        Else
            If
$iAddFiles == 1 AND $fFilesSerchRegMask AND $fAddFromRootDir Then $fAddToResult = 1
        EndIf

        If
$fAddToResult Then
            If
$sRootPath == 1 AND NOT $fIsDir Then
                $aResultList[0] += 1
                ReDim $aResultList[$aResultList[0]+1]
                $aResultList[$aResultList[0]] = $sFilePath
            Else
                $aSubResultList[0] += 1
                ReDim $aSubResultList[$aSubResultList[0]+1]
                $aSubResultList[$aSubResultList[0]] = $sFilePath
            EndIf
        EndIf


        $fSerchInWrongDirSub = 1
        If NOT $fSerchInWrongDir AND $fIsDir AND NOT $fDirsSerchRegMask Then $fSerchInWrongDirSub = 0

        $aSub2ResultList[0] = 0
        If $fIsDir Then
            If
$fSerchInWrongDirSub Then _
            $aSub2ResultList = _GetFilesDirsList($sFilePath, $sFilesSerchRegMask, $sNoFilesSerchRegMask, $sDirsSerchRegMask, $iAddFiles, $iAddDirs, $fSerchInWrongDir, 0, $fAddFromRootDirSub)
        EndIf

        If
$aSub2ResultList[0] Then
            For
$i = 1 To $aSub2ResultList[0]
                $aSubResultList[0] += 1
                ReDim $aSubResultList[$aSubResultList[0]+1]
                $aSubResultList[$aSubResultList[0]] = $aSub2ResultList[$i]
            Next
        EndIf
    WEnd


    FileClose($hSerch)

    For $i=1 To UBound($aSubResultList)-1
        $aResultList[0] += 1
        ReDim $aResultList[$aResultList[0]+1]
        $aResultList[$aResultList[0]] = $aSubResultList[$i]
    Next

    Return
SetError(0, 0, $aResultList)
EndFunc


Yashied 13-07-2009 23:51 1166877

Цитата:

Цитата proxy
а заме потом? сразу в ходе действия - заностить в массив только нужные.
вернее если тип файла не нужный - то не заносить. »

Это относится к 2-у способу _FileListToArray()

proxy, ты наверное альтруист, всем даешь готовые (полностью рабочие) решения. А вдруг человек сам хочет додуматься и ему нужна только подсказка в каком направлении, так сказать, двигаться. А дальше он сам ХОЧЕТ решить эту задачу. Хотя я в этом сильно сомневаюсь. :help:

Если всем давать готовые решения, то этот форум долго будет оставаться таким медлительным (2-3 поста в день :( ). Нужно людям помогать и давать думать, а не лишать их этого. В конце концов по оформлению топика сразу видно, что человек хочет: получить готовое решение или он действительно зашел в тупик и ему нужна подсказка (всего лишь намек). А может он вообще ошибся форумом или заранее знает, что здесь есть добрый и замечательный proxy, который для всех готов писать программы по своей доброте душевной. Причем, даже можно точно не расписывать свою проблему, он ведь догадливый и сам все поймет. Но это лишь мое личное мнение, без обид.

proxy 14-07-2009 00:03 1166887


Цитата:

Цитата Yashied
А вдруг человек сам хочет додуматься и ему нужна только подсказка в каком направлении, »

вот для этого выше и есть твои и мои к ним обсуждения ;)
имхо, если человек хочет сам - что ему мешает в этом разбираться? в примере разбираться? посмотреть на пример и дальше спросить на форуме что и как?
если он хочет - то будет разбираться! ...я против насилия - только хорошим можно сотворить хорошее ) если ему подошел пример - что в этом зазорного?
У меня эта функция уже готовая: перебор папок с подпапками и фильтрами на папки и файлы. А тут даже интерес добавить вариант файлов исключений.

Цитата:

Цитата Yashied
В конце концов по оформлению топика сразу видно, что человек хочет: получить готовое решение или он действительно зашел в тупик и ему нужна подсказка (всего лишь намек). А может он вообще ошибся форумом или заранее знает, что здесь есть добрый и замечательный proxy, который для всех готов писать программы по своей доброте душевной. Причем, даже можно точно не расписывать свою проблему, он ведь догадливый и сам все поймет. »

:)

Цитата:

Цитата Yashied
Нужно людям помогать и давать думать, а не лишать их этого. »

я не мешаю другим форумчанам этим заниматься. Креатор мне в этом помогает - если я наглею с примерами :)

Цитата:

Цитата Yashied
Но это лишь мое личное мнение, без обид. »

...чему тут обижаться? )) Самое главное - ЗДОРОВ и БОДР!! ))


[off]в
Цитата:

Цитата Yashied
Это относится к 2-у способу _FileListToArray() »

угу, просмотрел, понял

Yashied 14-07-2009 00:44 1166920

proxy, кстати, только сейчас заметил, у тебя отличная сигнатура, особенно вторая строчка. :wink:

semiono 14-07-2009 12:30 1167226

Цитата:

Цитата Yashied
А вдруг человек сам хочет додуматься »

Не не хочу сам думать :)
Я сразу сказал нужна утилита. К сожалению завален делами, будет потом время подумаю, но иногда просто помощь нужна.

Этсамое. Забыл. У меня всегда потребность чтобы всё консольное! И как изначала, я тоже говорил, надоб ввод создать.
Типа - # ifind.exe --not= exe или # ifind.exe --not= txt
Как обычно консольные проги бывают... Ну и print это всё в консоль отчёт :)
Ох, я уж точно сам не потяну это добить. :\
ЗЫ это хорошо, чтобы потом для всех, как win32 утиль, потомушта я тоже альтурист ))

amel27 14-07-2009 15:56 1167426

Цитата:

Цитата semiono
завален делами, будет потом время подумаю, но иногда просто помощь нужна.
Этсамое. Забыл. У меня всегда потребность чтобы всё консольное »

батником быстрей (как в написании, так и в выполнении) ....хотя, если "альтруист", тогда ладно :)

semiono 14-07-2009 18:42 1167591

у меня было желание и батник спросить, хотя не знаю, а что разве есть способ? :)
хотя то что я видел в разделе по батникам меня весьма удивляет! очень крута!

amel27 15-07-2009 11:20 1168079

Цитата:

Цитата semiono
было желание и батник спросить »

в соответствующую ветку


Время: 22:38.

Время: 22:38.
© OSzone.net 2001-