Показать полную графическую версию : [решено] @WorkingDir:> find(pro) [not exe] *.*
Нужна "утилита" скрипт, чтобы искать по маске, однако действие обратное!
Иными словами, чтоб задавать паттерн - найти все НЕ {txt или exe или pdf или zip итп.} файлы в текущей директории.
?
ЗЫ очень удобно проверить подкаталоги содеражащие определённый контент, скажем только *.zip на наличие
какого либо случайного мусора, типа всяких *.nfo или *.bak или ещё чего *.~ итд.
Способ 1. FileFindFirstFile() и FileFindNextFile()
Способ 2. _FileListToArray($sPath, '*', 1), затем удали из массива ненужные.
Способ 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
а заме потом? сразу в ходе действия - заностить в массив только нужные.
вернее если тип файла не нужный - то не заносить. »
Это относится к 2-у способу _FileListToArray()
proxy, ты наверное альтруист, всем даешь готовые (полностью рабочие) решения. А вдруг человек сам хочет додуматься и ему нужна только подсказка в каком направлении, так сказать, двигаться. А дальше он сам ХОЧЕТ решить эту задачу. Хотя я в этом сильно сомневаюсь. :help:
Если всем давать готовые решения, то этот форум долго будет оставаться таким медлительным (2-3 поста в день :( ). Нужно людям помогать и давать думать, а не лишать их этого. В конце концов по оформлению топика сразу видно, что человек хочет: получить готовое решение или он действительно зашел в тупик и ему нужна подсказка (всего лишь намек). А может он вообще ошибся форумом или заранее знает, что здесь есть добрый и замечательный proxy, который для всех готов писать программы по своей доброте душевной. Причем, даже можно точно не расписывать свою проблему, он ведь догадливый и сам все поймет. Но это лишь мое личное мнение, без обид.
А вдруг человек сам хочет додуматься и ему нужна только подсказка в каком направлении, »
вот для этого выше и есть твои и мои к ним обсуждения ;)
имхо, если человек хочет сам - что ему мешает в этом разбираться? в примере разбираться? посмотреть на пример и дальше спросить на форуме что и как?
если он хочет - то будет разбираться! ...я против насилия - только хорошим можно сотворить хорошее ) если ему подошел пример - что в этом зазорного?
У меня эта функция уже готовая: перебор папок с подпапками и фильтрами на папки и файлы. А тут даже интерес добавить вариант файлов исключений.
В конце концов по оформлению топика сразу видно, что человек хочет: получить готовое решение или он действительно зашел в тупик и ему нужна подсказка (всего лишь намек). А может он вообще ошибся форумом или заранее знает, что здесь есть добрый и замечательный proxy, который для всех готов писать программы по своей доброте душевной. Причем, даже можно точно не расписывать свою проблему, он ведь догадливый и сам все поймет. »
:)
Нужно людям помогать и давать думать, а не лишать их этого. »
я не мешаю другим форумчанам этим заниматься. Креатор мне в этом помогает - если я наглею с примерами :)
Но это лишь мое личное мнение, без обид. »
...чему тут обижаться? )) Самое главное - ЗДОРОВ и БОДР!! ))
[off]вЭто относится к 2-у способу _FileListToArray() »
угу, просмотрел, понял
proxy, кстати, только сейчас заметил, у тебя отличная сигнатура, особенно вторая строчка. :wink:
А вдруг человек сам хочет додуматься »
Не не хочу сам думать :)
Я сразу сказал нужна утилита. К сожалению завален делами, будет потом время подумаю, но иногда просто помощь нужна.
Этсамое. Забыл. У меня всегда потребность чтобы всё консольное! И как изначала, я тоже говорил, надоб ввод создать.
Типа - # ifind.exe --not= exe или # ifind.exe --not= txt
Как обычно консольные проги бывают... Ну и print это всё в консоль отчёт :)
Ох, я уж точно сам не потяну это добить. :\
ЗЫ это хорошо, чтобы потом для всех, как win32 утиль, потомушта я тоже альтурист ))
завален делами, будет потом время подумаю, но иногда просто помощь нужна.
Этсамое. Забыл. У меня всегда потребность чтобы всё консольное »батником быстрей (как в написании, так и в выполнении) ....хотя, если "альтруист", тогда ладно :)
у меня было желание и батник спросить, хотя не знаю, а что разве есть способ? :)
хотя то что я видел в разделе по батникам меня весьма удивляет! очень крута!
было желание и батник спросить »в соответствующую ветку
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.