FindExclude

Название FindExclude
Имя файла (*.txt) FindExclude.txt
Описание Исключает из поиска файлы и директории
Автор Вахмурка
Параметры -
Вызываемые плагины win, ini, vec, childwin
Иконка
Версия 1.1
Дата обновления 05.02.2008
local CR = esc(?+\r+, ?+\+)
local Quote = esc(?+"+, ?+\+)
local hwnd = win.handle("c=TTOTAL_CMD")
;"\ini\" - поддиректория scripts, которую необходимо создать самостоятельно
local Settings = scriptfolder ++ "\ini\FindExclude.ini"
local Files = ini.enum_keys(Settings, "Files")
local FileCounter = line(Files, 0)
local Dirs = ini.enum_keys(Settings, "Dirs")
local DirCounter = line(Dirs, 0)
local Result, Str, i, Temp

FMask = vec.create(FileCounter)
if(FMask == 0) do
	messagebox("ok error", "Vector not created", "VEC plugin error #1")
	quit
endif

DMask = vec.create(DirCounter)
if(DMask == 0) do
	messagebox("ok error", "Vector not created", "VEC plugin error #2")
	quit
endif

for(i = 1; i <= FileCounter; i++)
	Temp = line(Files, i)
	Str = ini.get(Settings, "Files", Temp)
	FMask[i - 1] = Str
	Result = Result ++ "Files: " ++ Quote ++ Temp ++ Quote ++ ", mask: " ++ Quote
	Result = Result ++ Str ++ Quote ++ CR
endfor

for(i = 1; i <= DirCounter; i++)
	Temp = line(Dirs, i)
	Str = ini.get(Settings, "Dirs", Temp)
	DMask[i - 1] = Str
	Result = Result ++ "Directories: " ++ Quote ++ Temp ++ Quote ++ ", path: " ++ Quote
	Result = Result ++ Str ++ Quote ++ CR
endfor

pickstring(Result, "Pick Item(s) to Exclude", 1)
DirCounter = word(_pickedline_, 0)

if(not _pickedline_)
	quit

Files = ifelse(ini.get(Settings, "Options", "Asterisk"), "*.* |", "|")
Dirs = ""

for(i = 1; i <= DirCounter; i++)
	Temp = word(_pickedline_, i)
	if(Temp <= FileCounter) do
		Files = Files ++ " " ++ FMask[Temp - 1]
	else
		Dirs = Dirs ++ " " ++ DMask[Temp - FileCounter - 1] ++ "\"
	endif
endfor

vec.destroy(FMask)
vec.destroy(DMask)

Str = Files ++ Dirs
win.postmessage(hwnd, 0x400+51, 501, 0)
Temp = ini.get(Settings, "Options", "FileDir")
wait.for(activewindow("c=TFindFile"))
Files = win.handle("c=TFindFile")

if(Temp != 2) do
	keys +{tab}{right}{tab 4}{space}{tab 2}{space}
	if(Temp)
		keys {space}

	keys {tab 6}{left}
endif

Dirs = childwin.handle(Files, 23)
win.settext(Dirs, Str)

for(childwin.gettext(Dirs) != Str)
	win.settext(Dirs, Str)
endfor

if(ini.get(Settings, "Options", "StartNow"))
	keys {enter}

Комментарии:

При поиске файлов бывает удобно исключить из поиска определенные файлы и директории. Делается это с целью, во-первых, сократить время поиска, а во-вторых, избавить результаты от заведомо лишней информации. Например, если мы ищем некую осмысленную строку текста, то разумно исключить из поиска мультимедийные файлы и, скажем, корзины. Однако ввод таких ограничений в строку поиска может занять заметное время.

Казалось бы, можно воспользоваться шаблонами поиска (saved searches). Но представим себе, что имеется пять директорий, которые чаще всего (но не всегда) приходится исключать. А что если нам захочется исключить не все пять, а только первую, вторую и четвертую? Придется создавать слишком много шаблонов, в которых недолго и запутаться.

Скрипт позволяет, используя те же (или другие) директории, формировать из них список исключений непосредственно перед началом поиска, исходя из текущей задачи.

Прежде всего необходимо создать файл конфигурации или воспользоваться моим в качестве примера. Например, если PowerPro установлена в директорию c:\Program Files\PowerPro, то полный путь файла конфигурации будет иметь вид c:\Program Files\PowerPro\scripts\ini\FindExclude.ini.

[Options]
FileDir=0
;0 - только файлы, 1 - только директории, 2 - все
Asterisk=0
;если 1, указать *.* в начале
StartNow=0
;если 1, запустить поиск сразу

[Files]
Graphics=*.jp?g
Executable=*.exe
Movie=*.mpg *.wmv *.avi

[Dirs]
VisualStudio=VStudio
Bins=Recycle?
Смысл ключей раздела [Options] понятен из комментариев.

Ключи раздела [Files] содержат обозначения тех файлов, которые нужно исключить из поиска, а значения ключей - соответствующие маски. Для одного ключа можно указывать несколько масок, разделенных пробелами.

С ключами раздела [Dirs] все немного иначе. Во-первых, не следует указывать полный путь - только имя директории (допустимы символы ? и *). Во-вторых, не рекомендуется присваивать одному ключу более одного значения.

После внесения в конфигурацию тех файлов и директорий, которые чаще всего приходится исключать из поиска, можно запускать скрипт. Затем в списке выбираем произвольное число пунктов и жмем ОК.


На главную Все о Total Commander PowerPro PowerPro & Total Commander