Выделение файлов через один

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

antabu
Сообщения: 189
Зарегистрирован: Чт сен 15, 2005 08:31
Откуда: Новосибирск

Выделение файлов через один

Сообщение antabu »

Подскажите, пожалуйста, как выделить (или найти), например, все чётные файлы в папке, а то я с явовскими скриптами не в ладах.

[mod="CaptainFlint"]Тема перенесена в "Автоматизацию".[/mod]
antabu
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Аватара пользователя
Mellomann
Сообщения: 709
Зарегистрирован: Пн сен 07, 2009 00:44

Сообщение Mellomann »

Insert + Вниз + Insert + Вниз + Insert + Вниз + Insert + Вниз + ... :lol:
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

antabu
Например, скриптом отсюда.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

sa
Тут речь только о файлах.
Аватара пользователя
LonerD
Сообщения: 1173
Зарегистрирован: Вт янв 04, 2011 03:56
Откуда: Макеевка
Контактная информация:

Сообщение LonerD »

Тут речь только о файлах.
Возможно, хотя явно и не указано нужно ли выделять только "обычные" файлы или все файлы (включая каталоги, которые являются частным видом файлов).

Ещё вариант, с использованием сторонних утилит, тормознутый, но портабельный, без WSH Helper (может, подойдёт).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

LonerD
Частный вид тут в контекст не вписывается.
С WSH Helper тоже можно добиться портабл. :wink:
antabu
Сообщения: 189
Зарегистрирован: Чт сен 15, 2005 08:31
Откуда: Новосибирск

Сообщение antabu »

Благодарю откликнувшихся. Поскольку файлы пронумерованы - воспользовался штатными средствами, советом Mellomann один раз, далее сохраняю выделение в текстовый файл и использую его многократно. Если число файлов в папке не превышает первоначальное - всё проходит.
antabu
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

antabu писал(а):(или найти)
Можно сохранить шаблон поиска со строкой “Искать файлы:” вида IMG_\d*[02468]\.JPG и с галкой для “Рег. выраж.” Затем кнопкой с командой LOADSEARCH Имя шаблона находить нужные файлы и выводить их на панель. (В моём примере ищутся фото с чётными номерами: IMG_0002.JPG, IMG_4.JPG и т.п.)
P.S.
Этот же шаблон можно использовать и для выделения, и в качестве фильтра.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Предложение от Mellomann
Insert + Вниз + Insert + Вниз + Insert + Вниз + Insert + Вниз + ... :lol:
+ утилита TCFS2 навеяли кнопку:

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\Utils\TCFS2\TCFS2.exe /ef "run_item(locktc,1) tcm(524)
loop(@<=1000 + send(`{INSERT}{DOWN 1}`)) run_item(locktc,0) redraw"
WCMICONS.DLL,39
Выделить элементы (числом не более указанного после @) с заданным интервалом (число после DOWN), начиная с элемента под курсором


-1
В конце списка может потребоваться ручная правка, поскольку последний элемент может быть выделен/невыделен ошибочно.
helb
Сообщения: 57
Зарегистрирован: Ср окт 08, 2014 21:46

Сообщение helb »

Я тоже, кстати, не пользуясь всяким внешним софтом, сделал простенький скрипт (подобный вроде где-то в общей теме по скриптам пробегал):
Выделяем всё с первого по последний, запускаем скрипт, и он жмет нужные клавиши за нас, снимая выделение с ненужных файлов. Выделение должно быть сплошным (хотя, думаю, иное решаемо с помощью cm_ShowOnlySelected и cm_SaveSelection). Для работы нужен назначенный хоткей для cm_GotoNextSelected, чтобы переходить к началу выделения. Единственное, не будет корректно выделять там где первый пункт не «..» (в корне), и выделение начинается с него, но это на практике особо смысла и не имеет.

Код: Выделить всё

' zebra-mark.vbs (by helb)
' Помечает выделенные подряд файлы через один.
' В TC должен быть назначен хоткей на cm_GotoNextSelected (в данном случае Ctrl+Home), и, соответственно, указан в скрипте (^{Home}) (Ctrl=^,Shift=+,Alt=%)
' TC Parameter: %L
set FSO = CreateObject("Scripting.FileSystemObject")
set list = FSO.OpenTextFile(WScript.Arguments(0), 8, false)
cnt = list.line - 1
if cnt < 2 then WScript.Quit
with WScript.CreateObject("WScript.Shell")
	'go to first selected: Home & cm_GotoNextSelected
	.SendKeys "{Home}^{Home}"
	cnt = cnt / 2
	for i = 1 to cnt
		.SendKeys "{Down}{Insert}"
	next
end with
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

helb писал(а):подобный вроде где-то в общей теме по скриптам пробегал
Ссылки на скрипты и так все собраны в этой теме.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

helb
Заметил, что выделение сбрасывается в системных папках и при показе только выделенных объектов. В последнем случае сбрасывается и сам режим показа только выделенных.
Наверное, это плата за параметр %L…
helb
Сообщения: 57
Зарегистрирован: Ср окт 08, 2014 21:46

Сообщение helb »

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

Код: Выделить всё

.SendKeys "<хоткей для cm_SaveSelection>"
добавить и восстанавливать запомненное выделение после сброса.

Еще вариант не с листом, а списком в командной строке — тут лимит примерно в 2500 файлов, но форсированного обновления нет:

Код: Выделить всё

' zebra-mark.vbs (by helb)
' Помечает выделенные подряд файлы через один.
' В TC должен быть назначен хоткей на cm_GotoNextSelected (в данном случае Ctrl+Home), и, соответственно, указан в скрипте (^{Home}) (Ctrl=^,Shift=+,Alt=%)
' TC Parameter: %s (лимит в ~2500 файлов)
cnt = WScript.Arguments.length
if cnt < 2 then WScript.Quit
with WScript.CreateObject("WScript.Shell")
	'go to first selected: Home & cm_GotoNextSelected
	.SendKeys "{Home}^{Home}"
	cnt = cnt / 2
	for i = 1 to cnt
		.SendKeys "{Down}{Insert}"
	next
end with
Ответить