Скрипты - уникальный инструмент для достижения различных целей в работе с файлами и не только, особенно в файловом менеджере, даже если вы ничего раньше об этом ничего не слышали и не знали, то путём простых движений вы можете оптимизировать свои действия Тема тестирования скриптов создана для увеличения функциональности Total Commander Каждый может выложить свой скрипт написанный на любом языке: vbs, js, hta, au3,ahk, bat,cmd... главное, чтобы он относился как-то к Total Commander, можно было им воспользоваться и к нему было должное описание к применению. Каждый может протестировать, дать свой комментарий и ...[move]если есть интересная идея, вы можете поделиться ей и заказать скрипт, а вдруг она покажется интересной для авторов...[/move] Всё это делается для тех, кто хочет экономить время и автоматизировать работу Огромное спасибо участникам, авторам и всем повлиявшим на тему
Перед использованием скриптов, проэкспериментируйте сначала на "ненужных" файлах (у меня на разных дисках есть несколько папок с разными файлами для экспериментов) Как только вы убедитесь, что скрипт работает как надо, пользуйтесь на реальных файлах
- ряд скриптов могут не сработать: 1. Из-за раскладки клавиатуры (переключите раскладку, повторите заново) 2. Из-за неправильно указанных параметров (внимательно читайте комментарии внутри скриптов) 3. Из-за параметров %p и %P в командной строке и тому подобных (на практике иногда надо их брать кавычки "%P") 4. Из-за 2-х запущенных копий Total Commander (редко, но бывает) 5. Из-за неверно указанных путей использованных файлов (внимательно проверьте пути) 6. Из-за недостающих дополнительных утилит, использующих скриптом (проверьте есть ли они у вас) 7. Из-за очень большого количества файлов, посланных для обработки скрипту [indent][indent]- Может показаться, что скрипт не сработал, возможно он ещё работает. Чтобы в этом убедится откройте Диспетчер задач и посмотрите процесс - Скрипты, связанные с посланием команд Total Commander'y при очень большом количестве файлов работают неадекватно. (попробуйте в Тотале просто выделить 100.000 файлов - это займёт несколько секунд, сколько точно, никто сказать не может - это зависит от многих факторов. Так же и скрипты, связанные с фильтрацией, выделением... может показаться, что глючат - на самом деле сам Тотал не справляется с посланной ему командой, если речь идёт об обработке большого количества файлов)[/indent][/indent] --------------------------------------------------------------------------------------------------------------------------------- 8. Из-за ошибки автора - Сообщайте об ошибках
Для вызова скриптов в пользовательских командах или кнопках используются параметры:
? - В качестве первого параметра вызывает перед стартом программы диалоговое окно, содержащее указанные далее параметры. Вы можете изменить их перед стартом программы и даже отменить запуск
%P - Вставляет в командную строку исходный путь, включая обратную косую черту (\) в конце %N - Помещает в командную строку имя файла с расширением под курсором %O - Помещает в командную строку текущее имя файла без расширения %E - Помещает в командную строку текущее расширение (без предшествующей точки).
%T - Вставляет текущий каталог назначения %M - Помещает в командную строку текущее имя с расширением файла в каталоге назначения
%S - Помещает в командную строку имена всех выделенных файлов. Имена, содержащие пробелы, будут взяты в кавычки. Имейте в виду, что длина командной строки не может превышать 32767 символов %S10 - Помещает в командную строку имена не более чем 10 первых выделенных файлов. Вы можете использовать любое другое число для ограничения количества файлов, передаваемых в программу
%R - Работает аналогично %S, но для выделенных файлов в целевой панели
Замечания:
• %N и %M вставляют длинное имя, в то время как %n и %m вставляют имя DOS (8.3) %P и %T вставляют пути с длинными именами каталогов, а %p и %t — с короткими То же самое для %o, %e и %s и %r
• Если приписать %P, %p, %T или %t непосредственно перед %S или %s (без пробела между ними!), то к имени каждого файла из списка будет добавлен путь. При наличии пробелов полный путь автоматически заключается в кавычки. Пример: %P%S помещает в командную строку список всех выделенных файлов с полными путями
%L, %l, %F, %f, %D, %d, %WL, %WF, %UL, %UF - Создаётфайл списка в каталоге, заданном переменной TEMP, с именами выделенных файлов и каталогов и добавляет имя этого файла списка в командную строку. Список удаляется автоматически, когда запущенная программа завершается. Можно создать файл списка в одном из 10-ти форматов:
%L - Длинные имена файлов, включая полный путь, например, c:\Program Files\Long name.exe %l - (L в нижнем регистре) Короткие имена файлов, включая полный путь, например, C:\PROGRA~1\LONGNA~1.EXE.
%F - Длинные имена файлов без пути, например, Long name.exe. %f - Короткие имена файлов без пути, например, LONGNA~1.EXE.
%D - Короткие имена файлов, включая полный путь, но с использованием набора символов DOS для диакритических знаков. %d - Короткие имена файлов без пути, но с использованием набора символов DOS для диакритических знаков.
%UL, %UF - Аналогично %L и %F, но файлы списка создаются в Unicode-формате UTF-8 (с сигнатурой). %WL, %WF - Аналогично %L и %F, но файлы списка создаются в Unicode-формате UTF-16 (с сигнатурой).
%v - Помещает в командную строку имя виртуального файла при работе с FS-плагинами виртуальных панелей, для которых %N вставляет имя реального файла (в файловой системе), на который указывает выбранный элемент. %V - То же, что и %v, но с полным путём (включая имя плагина).
%X - Трактует последующие параметры как относящиеся к левой/правой панелям вместо исходной/целевой: %P, %p (путь слева), %T, %t (путь справа), %N, %n (имя слева), %M, %m (имя справа), %S, %s (выделенные слева), %R, %r (выделенные справа). Пример:%X%P %T - передаёт текущий путь слева и справа, например, для внешнего инструмента синхронизации.
%x - Трактует последующие параметры снова как относящиеся к исходной/целевой панелям. Пример:%X%P %x%P - передаёт текущий путь в левой панели и в исходной.
%Z - Будучи указан в любом месте в списке параметров, разрешает передавать архивы в качестве части пути во внешние программы для %P и %T, когда в панели открыто содержимое архива. Пример:%Z%P - передаёт имя открытого в панели архива во внешнюю программу.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% - Вставляет одиночный знак процента, важно для переменных окружения, которые прописываются в параметрах Пример: %%COMMANDER_PATH%%\
1. Указанный в секциях "код" текст необходимо сохранить в виде текстового файла с именем и расширением, указанным в начале кода. 2. Затем нужно перетащить этот файл на панель инструментов Total Commander - создастся кнопка. 3. Созданную кнопку необходимо подредактировать - нажать правой кнопкой мыши на созданной кнопке - выбрать "Изменить". 4. Изменение полей [indent][indent] а)Команда: путь\к\скрипту (обычно он уже есть) для скриптов au3, ahk перед скриптом необходимо поставить путь запускаемого преложения пример: %COMMANDER_PATH%\Utilities\Scripting\AutoIt\AutoIt3.exe "%COMMANDER_PATH%\Scripts\TextWork\InsertText.au3" б)Параметры: строку нужно заполнить согласно описанию в шапке скрипта. пример: %L в)Путь запуска: лучше это поле очищать (для bat, cmd и некоторых скриптов он необходим) г)Файл значка: редактируются "по вкусу" д)Подсказка: берётся из описания к скрипту, с учётом тех или иных параметров[/indent][/indent]
1. В связи с тем, что функции во многих скриптах повторяются, ряд из них вынесены в отдельные файлы Рекомендую создать папку Include скачайте и положите туда эти файлы:
Скачать:TCMCWindow (Версия 1.3 от 31.01.2012) Скачать:TCMCWindow (Версия 1.5. от 22.03.2012)
Что может утилита совместно с TCMC - посылать команды Total Commander - посылать клавиатурные нажатия окнам - вводить строки в окна - посылать текст в буфер обмена - возвращать текст из буфера обмена - устанавливать необходимую паузу между любыми действиями
Описание прилагается в архиве с программой Так же в архиве лежит утилита TCMC
Дата: Воскресенье, 26.02.2012, 13:17 | Сообщение # 241
Полковник
Зареген: 09.12.2011
Всего сообщений: 89
Quote (yaroslavi)
Я тщательно скопировал текст Вашего скрипта, но там были указаны одинарные знаки %. Я добавил еще по одному: %%COMMANDER_PATH%%\Programs\Text\Texter2\Texter2.exe
Подведём итог:
Quote ("Скрипт")
' В поле "Команда" после пути к скрипту через пробел написать путь к редактору ' Пример: %COMMANDER_PATH%\Scripts\OpenEditor&Paste.vbs "%COMMANDER_PATH%\Programs\Editors\Texter2\Texter2.exe"
Quote (yaroslavi)
меня тоже часто раздражают вопросы людей, не пытающихся вникнуть в суть вопроса
Не нужен в поле Команда сдвоенный процент!
Проблема неправильной передачи текста из буфера - это не проблема скрипта. То же самое самостоятельным копипастом даёт аналогичный результат?
Сообщение отредактировал Flasher - Воскресенье, 26.02.2012, 13:25
Дата: Воскресенье, 26.02.2012, 13:32 | Сообщение # 242
Полковник
Зареген: 11.04.2010
Всего сообщений: 50
Quote (Flasher)
написано же "Пример". Это значит, что путь может быть совершенно другим. В сборке пути иные, смотрите либо сопоставляя с папками ТС, либо с предыдущими скриптами
Если Вы обратили внимание на мой скриншот, то там прописан несколько иной путь, чем у Вас. Это означает, что, несмотря на сфою неофитскую неосведомленность, подобные вещи я все-таки понимаю...
Дата: Воскресенье, 26.02.2012, 13:37 | Сообщение # 243
Полковник
Зареген: 09.12.2011
Всего сообщений: 89
yaroslavi, да, вот буквально перед прочтением поста обратил внимание и удивился, зачем там параметр прописан в обоих полях одновременно. При таких условиях скрипт второй параметр просто проигнорирует.
Сообщение отредактировал Flasher - Воскресенье, 26.02.2012, 13:41
Дата: Воскресенье, 26.02.2012, 13:41 | Сообщение # 244
Полковник
Зареген: 11.04.2010
Всего сообщений: 50
Quote (Flasher)
Не нужен в поле Команда сдвоенный процент!
Сдвоенный процент стоит у меня не в поле "Команда", а в поле "Параметр", поскольку об этом вчера писал Андрей: "в параметрах надо удваивать %%". Без него вылетает ошибка, о которой я писал раньше: "" "OMMANDER_PATHPrograms\Text\Texter2\Texter2.exe" не существует. Создать новый с таким именем?""
Quote (Flasher)
То же самое самостоятельным копипастом даёт аналогичный результат?
Нет, обычным способом все вставляется безо всякого мусора...
Дата: Воскресенье, 26.02.2012, 13:46 | Сообщение # 245
Полковник
Зареген: 09.12.2011
Всего сообщений: 89
Quote (yaroslavi)
Сдвоенный процент стоит у меня не в поле "Команда", а в поле "Параметр"
Тем не менее в шапке скрипта дана чёткая информация, которой нужно следовать, чтобы потом не выяснять, в чём проблема. К тому же для написания переменных окружения в поле "Параметры" должны быть определённые условия, благо в моём скрипте используется метод, который этой условности удовлетворяет. Сам TC не конвертирует переменные среды из поля "Параметры"!
Quote (yaroslavi)
Нет, обычным способом все вставляется безо всякого мусора...
А по Shift+Insert? Лично я проблему, сколько не пытался, воспроизвести не смог. Текст передаётся без ошибок.
Сообщение отредактировал Flasher - Воскресенье, 26.02.2012, 13:57
Дата: Воскресенье, 26.02.2012, 17:58 | Сообщение # 252
Полковник
Зареген: 11.04.2010
Всего сообщений: 50
Quote (Flasher)
yaroslavi, да, вот буквально перед прочтением поста обратил внимание и удивился, зачем там параметр прописан в обоих полях одновременно. При таких условиях скрипт второй параметр просто проигнорирует.
Спасибо, как только убрал из поля "Параметр" путь к Текстеру, все сразу заработало нормально...
Добавлено (26.02.2012, 15:11) --------------------------------------------- Господа, большое спасибо за помощь и простите и Вы меня, что задал Вам столько мороки. Зато узнал массу нового.
Сообщение отредактировал yaroslavi - Воскресенье, 26.02.2012, 18:03
Дата: Пятница, 23.03.2012, 18:28 | Сообщение # 253
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Обновлены вспомогательные скрипты: FunctionsPlus.vbs (Версия: 2.3 от 22.03.2012) - файл с различными функциями, которые можно использовать в других скриптах FunctionsINIRWS.vbs (Версия: 1.4 от 19.03.2012) - файл с функциями чтения и записи INI файлов + FunctionsINITextRWS.vbs скачать можете в шапке темы Читайте:Справочные материалы по работе c TC + Онлайн справка TC
Дата: Четверг, 31.05.2012, 09:34 | Сообщение # 254
Подполковник
Зареген: 16.09.2011
Всего сообщений: 36
Andrey_A, Извини за оффтоп, в личку не помещается:
Code
/* Скрипт проверяет свободное место на диске и если места меньше указанного. Есть возможность проверять свободное место по размеру проверочного файла (например, базы данных) BorisMor(c) 06.02.2012 */ //============================ Параметры ============================ var char_driver = "C"; // буква диска var min_free = 8000; // сколько должно быть минимум свободного места var test_file = ""; // тестовый файл. Если он больше минимума то по нему проверяют место var value_in = "M"; // в чем прописан минимальный размер: M - мегабайты, G - гигабайты // ====================================================================
function get_koef(value) { /* Возрщает число на которое надо поделить байты что бы получить мегабайты или гигабайты value может быть: M - мегабайты, G - гигабайты */ if(value=="M") return 1024 * 1024; if(value=="G") return 1024 * 1024 * 1024 }
function get_date(value) { // возвращает дату: ДД.ММ.ГГГГ ЧЧ:MM if(value==undefined) var dt = new Date(); else var dt = new Date(value);
var minute = dt.getMinutes(); var hours = dt.getHours(); var month = dt.getMonth()+1; var day = dt.getDate();
var s = day + '.' + month+'.'+ dt.getYear()+' '+hours+':'+ minute; return s; }
var ForRead = 1; // режим доступа до файла - чтения var ForWriting = 2; // режим доступа до файла - запись var wsh = WScript.CreateObject("WScript.Shell"); // Shell объект var fso = WScript.CreateObject("Scripting.FileSystemObject"); // доступ к файлам var net = WScript.CreateObject("WScript.Network"); // сесть
var ComputerName = net.ComputerName; // имя компьютера var send_messge = "NET SEND Serjo \"Внимание! \nНа компютере " + ComputerName + " требуется очистить место на диcке " + char_driver + ":\\\ \nОбратитесь к администратору. \"";
// --- Получить каталог скрипта --- var sDirRun = WScript.ScriptFullName; sDirRun = sDirRun.substr(0,sDirRun.lastIndexOf("\\")+1); // ---------------------------------------
// ----- создать лог ----- var name_file_log = sDirRun + fso.GetBaseName(WScript.ScriptFullName) + ".log"; if(fso.FileExists(name_file_log)) try { fso.DeleteFile(name_file_log); // удаляем старый лог файл } catch(e) { WScript.Echo("Ошибка при удаление старого лога \n" + name_file_log) } var log = fso.OpenTextFile(name_file_log, ForWriting, true); // новый лог файла // --------------------------
log.WriteLine("Требуется не менее "+ min_free + value_name); if (FreeSpace < min_free) { try{ log.WriteLine(send_messge); var WshExec = wsh.Exec(send_messge); } catch(e) { log.WriteLine("Ошибка при отправке сообщения - " + e.description); } } log.WriteLine(get_date() + " - Окончание");
Требуется, чтоб отправка сообщения была нескольким пользователям сети, можно чтоб не логировалось остальные, а только первый. Модифицируй с комментариями пожалуйста
Сообщение отредактировал SerJo - Четверг, 31.05.2012, 09:35
Дата: Вторник, 05.06.2012, 09:41 | Сообщение # 256
Подполковник
Зареген: 16.09.2011
Всего сообщений: 36
Andrey_A, спасибо, гуру))
Добавлено (05.06.2012, 09:41) --------------------------------------------- Маленькая поправочка, и чтоб выдавало свободное место при сообщении)) Буду признателен
Дата: Вторник, 05.06.2012, 18:57 | Сообщение # 257
Сборщик TC Image
Зареген: 04.08.2011
Всего сообщений: 431
Скрипт на js, я с js не очень - чтобы получилось на 100% придётся переводить в vbs, но времени нет... На первый взгляд немного вставил...
Code
/* Скрипт проверяет свободное место на диске и если места меньше указанного. Есть возможность проверять свободное место по размеру проверочного файла (например, базы данных) BorisMor(c) 06.02.2012 */ //============================ Параметры ============================ var char_driver = "C"; // буква диска var min_free = 8000; // сколько должно быть минимум свободного места var test_file = ""; // тестовый файл. Если он больше минимума то по нему проверяют место var value_in = "M"; // в чем прописан минимальный размер: M - мегабайты, G - гигабайты // ====================================================================
function get_koef(value) { /* Возрщает число на которое надо поделить байты что бы получить мегабайты или гигабайты value может быть: M - мегабайты, G - гигабайты */ if(value=="M") return 1024 * 1024; if(value=="G") return 1024 * 1024 * 1024 }
function get_date(value) { // возвращает дату: ДД.ММ.ГГГГ ЧЧ:MM if(value==undefined) var dt = new Date(); else var dt = new Date(value);
var minute = dt.getMinutes(); var hours = dt.getHours(); var month = dt.getMonth()+1; var day = dt.getDate();
var s = day + '.' + month+'.'+ dt.getYear()+' '+hours+':'+ minute; return s; }
var ForRead = 1; // режим доступа до файла - чтения var ForWriting = 2; // режим доступа до файла - запись var wsh = WScript.CreateObject("WScript.Shell"); // Shell объект var fso = WScript.CreateObject("Scripting.FileSystemObject"); // доступ к файлам var net = WScript.CreateObject("WScript.Network"); // сесть
var ComputerName = net.ComputerName; // имя компьютера var send_messge = "NET SEND Serjo \"Внимание! \nНа компютере " + ComputerName + " требуется очистить место на диcке " + char_driver + ":\\\ \nОбратитесь к администратору. \"";
var send_messge2 = // здесь прописываешь сообщение 2-му пользователю, на подобе send_messge var send_messge3 = // 3-му...
// --- Получить каталог скрипта --- var sDirRun = WScript.ScriptFullName; sDirRun = sDirRun.substr(0,sDirRun.lastIndexOf("\\")+1); // ---------------------------------------
// ----- создать лог ----- var name_file_log = sDirRun + fso.GetBaseName(WScript.ScriptFullName) + ".log"; if(fso.FileExists(name_file_log)) try { fso.DeleteFile(name_file_log); // удаляем старый лог файл } catch(e) { WScript.Echo("Ошибка при удаление старого лога \n" + name_file_log) } var log = fso.OpenTextFile(name_file_log, ForWriting, true); // новый лог файла // --------------------------
log.WriteLine("Требуется не менее "+ min_free + value_name); if (FreeSpace < min_free) { try{ log.WriteLine(send_messge); var WshExec = wsh.Exec(send_messge);
log.WriteLine(send_messge2); var WshExec = wsh.Exec(send_messge2); // Это 2-му
log.WriteLine(send_messge3); var WshExec = wsh.Exec(send_messge3); // Это 3-му } catch(e) { log.WriteLine("Ошибка при отправке сообщения - " + e.description); } } log.WriteLine(get_date() + " - Окончание");