| Single Post |
Topic: Autorun |
| Author |
Message |
Orion9

|
Posted: Thu Apr 16, 2026 00:17 Post subject: |
|
|
Похоже, недооценил я болвана. Оказывается, он уже умеет работать с Autorun, хотя с большими ограничениями. Но все-равно прикольно.
 Autorun | Code: | В контексте Total Commander под «Autorun» чаще всего подразумевается плагин Autorun. Он использует собственный скриптовый язык для автоматизации действий при запуске и работе TC.
Ниже приведен полный пример конфига Autorun.cfg, который запускает ExifTool в режиме -stay_open при старте Total Commander и корректно закрывает его при выходе.
Полный пример Autorun.cfg
Этот файл должен находиться в папке с плагином (обычно %COMMANDER_PATH%\Plugins\wlx\Autorun\).
autoscale
; =========================================================
; Автозапуск ExifTool в режиме -stay_open для Total Commander
; =========================================================
; 1. Определяем пути (используем внутренние переменные TC)
Set EXIFTOOL_PATH %COMMANDER_PATH%\Utils\ExifTool\exiftool.exe
Set ARG_FILE %COMMANDER_PATH%\Utils\ExifTool\exiftool_args.txt
; 2. Очищаем файл аргументов при старте, если он остался
ShellExec /SW_HIDE /WAIT %COMSPEC% "/c break > ""%ARG_FILE%"""
; 3. Запускаем ExifTool в фоновом режиме
; Он будет висеть в памяти и ждать команд из ARG_FILE
ShellExec /SW_HIDE "%EXIFTOOL_PATH%" "-stay_open True -@ ""%ARG_FILE%"""
; 4. (Опционально) Добавляем команду в пользовательское меню TC через скрипт
; Здесь можно прописать дополнительные действия, например, переменные окружения
; 5. Регистрация события на ВЫХОД из Total Commander
; Чтобы не оставлять "зомби-процесс" в памяти
Pragma Events ExitingTC
Func ExitingTC
; Записываем команду закрытия в файл аргументов
; В Autorun.cfg запись в файл удобнее делать через cmd
ShellExec /SW_HIDE %COMSPEC% "/c echo -stay_open > ""%ARG_FILE%"" && echo False >> ""%ARG_FILE%"""
EndFunc
Используйте код с осторожностью.
Как это работает:
Set: Создает внутренние переменные для удобства. %COMMANDER_PATH% — это корень вашего Total Commander.
ShellExec /SW_HIDE: Запускает процесс абсолютно скрыто, чтобы консольное окно не мелькало перед глазами.
%COMSPEC% /c break > ...: Это системная команда для создания пустого файла или его очистки.
Pragma Events ExitingTC: Ключевая фишка плагина Autorun. Она заставляет плагин выполнить функцию ExitingTC ровно в тот момент, когда вы нажимаете "крестик" в Total Commander.
Завершение: Мы отправляем -stay_open False в файл, и ExifTool сам корректно завершает свою работу.
Как использовать этот процесс из кнопок TC?
Теперь, когда процесс уже запущен плагином, вы можете создать кнопку на панели TC для мгновенного выполнения действий:
Команда: cmd.exe
Параметры: /c echo -Artist="MyName" >> "%%COMMANDER_PATH%%\Utils\ExifTool\exiftool_args.txt" && echo %N >> "%%COMMANDER_PATH%%\Utils\ExifTool\exiftool_args.txt" && echo -execute >> "%%COMMANDER_PATH%%\Utils\ExifTool\exiftool_args.txt"
Иконка: exiftool.exe
Нужно ли пояснить, как настроить автоматическую передачу списка всех выделенных файлов в этот запущенный процесс?
Чтобы эффективно передать список всех выделенных файлов из Total Commander в уже запущенный через Autorun процесс ExifTool, лучше всего использовать промежуточный скрипт (VBScript или Batch), так как сама кнопка TC не умеет циклом записывать строки в файл.
Самый быстрый и надежный способ — создать Batch-файл, который переформатирует список файлов %L (временный файл со списком выделенного) в формат, понятный ExifTool.
1. Создаем управляющий Batch-скрипт (et_send.bat)
Сохраните этот код в файл, например, в папку с ExifTool:
batch
@echo off
set "ARG_FILE=%COMMANDER_PATH%\Utils\ExifTool\exiftool_args.txt"
:: Проверяем, переданы ли параметры
if "%~1"=="" exit
:: Записываем параметры команды (например, -Artist="Name")
:: Мы будем передавать их как первый аргумент скрипта
echo %~2 >> "%ARG_FILE%"
:: Читаем файл списка %L, который передает Total Commander
:: И записываем каждый путь в arg-файл для ExifTool
for /f "usebackq delims=" %%a in ("%~1") do (
echo %%a >> "%ARG_FILE%"
)
:: Отправляем команду на выполнение
echo -execute >> "%ARG_FILE%"
Используйте код с осторожностью.
2. Настраиваем кнопку в Total Commander
Создайте новую кнопку на панели инструментов:
Команда: путь\к\вашему\et_send.bat
Параметры: %L "-Artist=My Property"
%L — это критический параметр TC, он создаст временный файл со списком всех выделенных файлов и передаст путь к этому списку в скрипт.
"-Artist=My Property" — это сама команда для ExifTool (можно менять на любые другие теги).
Иконка: exiftool.exe
Запуск в свернутом виде: Поставьте галочку (чтобы не мелькало окно консоли).
Как это работает в связке:
Autorun запустил «вечный» процесс ExifTool при старте TC.
Вы выделяете 100 фотографий и нажимаете кнопку.
Скрипт et_send.bat мгновенно берет список этих 100 файлов и дописывает их в exiftool_args.txt.
В конце дописывается -execute.
ExifTool (который уже в памяти) видит обновление файла, мгновенно обрабатывает все 100 файлов и снова переходит в режим ожидания.
Почему это лучше обычных кнопок?
Если запускать ExifTool обычным способом на 100 файлов через %L, TC создаст 100 процессов или один тяжелый процесс с огромной командной строкой. Метод -stay_open через Autorun делает это в 10-50 раз быстрее, так как программа не тратит время на запуск. |
 ProcessExecGetOutput | Code: | В плагине Autorun для Total Commander функция ProcessExecGetOutput является частью дополнительного расширения Process (входящего в состав пакета системных функций плагина). Она позволяет запустить внешнюю программу и сразу перехватить её консольный вывод в переменную скрипта.
Однако важно помнить: при использовании -stay_open процесс ExifTool не завершается, поэтому ProcessExecGetOutput будет «висеть» в ожидании, пока вы не закроете ExifTool.
1. Как использовать ProcessExecGetOutput (Разовый запуск)
Если вам нужно просто получить данные один раз (без фонового режима), используйте такой синтаксис:
autoscale
; Загружаем библиотеку для работы с процессами (обязательно!)
LoadLibrary Plugins\Process.dll
; Выполняем команду и записываем результат в переменную ModelName
; Параметр -s3 в ExifTool выводит только «чистое» значение тега
Set ModelName ProcessExecGetOutput("%COMMANDER_PATH%\Utils\ExifTool\exiftool.exe", "-s3 -Model ""photo.jpg""")
; Выводим результат пользователю
MsgBox "Модель камеры: %ModelName%"
Используйте код с осторожностью.
2. Особенности для фонового режима (-stay_open)
Как упоминалось ранее, ProcessExecGetOutput не подходит для чтения данных из уже запущенного фонового процесса. Для этого в Autorun используется связка с временным файлом.
Полная схема «Запрос — Чтение» в Autorun.cfg:
autoscale
LoadLibrary Plugins\Process.dll
; --- Настройка путей ---
Set ET_EXE "%COMMANDER_PATH%\Utils\ExifTool\exiftool.exe"
Set ET_ARGS "%COMMANDER_PATH%\Utils\ExifTool\args.txt"
Set ET_OUT "%COMMANDER_PATH%\Utils\ExifTool\out.txt"
; --- Функция получения тега из фонового процесса ---
Func GetTag(FilePath, Tag)
; 1. Удаляем старый файл вывода
ShellExec /SW_HIDE /WAIT %COMSPEC% "/c if exist ""%ET_OUT%"" del ""%ET_OUT%"""
; 2. Записываем команды в arg-файл (ExifTool запишет результат в ET_OUT)
ShellExec /SW_HIDE %COMSPEC% "/c echo -s3 >> ""%ET_ARGS%"" && echo -%Tag% >> ""%ET_ARGS%"" && echo %FilePath% >> ""%ET_ARGS%"" && echo -w! >> ""%ET_ARGS%"" && echo %ET_OUT% >> ""%ET_ARGS%"" && echo -execute >> ""%ET_ARGS%"""
; 3. Ждем, пока ExifTool создаст файл (цикл ожидания)
Set WaitCount 0
While not FileExist("%ET_OUT%")
Sleep 50
Set WaitCount %WaitCount% + 1
if %WaitCount% > 20 then Break ; Таймаут 1 сек
Wend
; 4. Читаем результат в переменную
Set TagValue ReadFile("%ET_OUT%")
Return %TagValue%
EndFunc
; --- Пример вызова ---
Set MyResult GetTag("C:\Images\test.jpg", "Artist")
MsgBox "Автор: %MyResult%"
Используйте код с осторожностью.
Важные команды плагина Process:
ProcessExist(name): Проверяет, запущен ли процесс (вернет 1 или 0). Полезно проверять перед отправкой команд.
ProcessTerminate(name): Принудительно завершает процесс по имени.
ProcessCount(name): Считает количество запущенных копий программы. |
Ограничения. Видно, что код ИИ использует старую версию плагина, в которой командная запись была главной и чаще всего единственно возможной. Похоже, источником информации для ИИ является форум Гислера и те небольшие данные о работе плагина, которые он берет только оттуда. Этот форум он не анализирует, а жаль. Современный Autorun далеко уже ушел.
AkulaBig, а вы упорно хотите добить ExifTool Думаю, автору плагина результаты ваших тестов будут, как минимум, интересны.
Добавлено спустя 10 минут:
P.s.
| Болван wrote: | | Pragma Events ExitingTC: Ключевая фишка плагина Autorun. Она заставляет плагин выполнить функцию ExitingTC ровно в тот момент, когда вы нажимаете "крестик" в Total Commander. |
Закат под стол |
|
|
|
 |
|
Powered by phpBB © 2001, 2005 phpBB Group
|