Использование значения -@ - (с дефисом в конце) приказывает ExifTool читать список аргументов прямо из стандартного потока ввода (stdin), а не из физического файла на диске.Для реализации этого в AutoHotkey v2 необходимо использовать объект WshShell через COM-интерфейс, так как стандартная функция Run в AHK не умеет напрямую перенаправлять потоки stdin/stdout.🤖 Скрипт AHK v2 с передачей аргументов через StdinЭтот скрипт передает команды в ExifTool в режиме реального времени через оперативную память и сразу возвращает текстовый ответ программы в переменную AHK.
| Code: |
#Requires AutoHotkey v2.0
; 1. Конфигурация путей
exiftoolPath := "C:\Windows\exiftool.exe"
targetFile := "C:\Photos\image.jpg"
; 2. Формируем список аргументов (строго по одному на строку)
; Опция -S делает вывод компактным (Тег: Значение)
argsContent :=
(
"-S"
"-Artist=Новый Автор"
"-Copyright=2026 Студия"
)
; Добавляем путь к файлу в конец списка команд
argsContent .= "`n" targetFile
; 3. Запускаем процесс ExifTool с флагами чтения из stdin (-@ -)
shell := ComObject("Wscript.Shell")
exec := shell.Exec('"' exiftoolPath '" -@ -')
; 4. Отправляем команды в поток stdin программы
exec.StdIn.WriteLine(argsContent)
exec.StdIn.Close() ; Закрываем поток, чтобы ExifTool понял, что передача команд окончена, и начал выполнение
; 5. Считываем результат работы (stdout) из ExifTool в переменную
output := exec.StdOut.ReadAll()
; 6. Показываем результат
MsgBox(output, "Результат ExifTool")
|
⚠️ Критические правила при работе с -@ -Закрытие потока: Метод exec.StdIn.Close() обязателен. Пока поток открыт, ExifTool будет бесконечно ждать продолжения ввода и зависнет.Кавычки не нужны: Внутри строки argsContent пути к файлам и текстовые значения с пробелами нельзя оборачивать в кавычки.Символы перевода строки: Каждая опция и её значение должны разделяться стандартным символом новой строки (``n`).Если вам необходимо развить этот скрипт, уточните:Нужно ли обрабатывать несколько файлов по очереди в одном долгоживущем процессе ExifTool (режим -stay_open)?Требуется ли обрабатывать ошибки, возникающие при работе утилиты (чтение потока StdErr)?Какого формата данные вы хотите извлечь из файла (строки, JSON или XML)?