AkulaBig
|
Posted: Fri May 08, 2026 11:18 Post subject: |
|
|
В общем вот полностью рабочее решение:
| Code: |
Func ET(FileName, FieldIndex, UnitIndex)
If StrPos(FileGetAttr(FileName), "D") Then Return
Local ExifToolPID = 0, ExifToolOut = TEMP & "\exiftool_out.txt", ExifToolArgs = TEMP & "\exiftool_args.txt"
ExifToolPID = ProcessGetId("exiftool.exe")
If ExifToolPID = 0 Then
FileWrite(ExifToolArgs, "", "UTF-8 NOBOM")
ShellExec /TT /SW_HIDE %util_ET% "-stay_open True -@ ""%ExifToolArgs%"""
EndIf
ShellExec /SW_HIDE /WAIT %COMSPEC% "/c break > ""%ExifToolOut%"""
Local sArgs = "-f" & auCRLF & _
"-s3" & auCRLF & _
"-m" & auCRLF & _
"-q" & auCRLF & _
"-q" & auCRLF & _
"-Title" & auCRLF & _
"-W+!" & auCRLF & _
ExifToolOut & auCRLF & FileName & auCRLF & "-execute" & auCRLF
Local obj = BinaryFile(ExifToolArgs, "a")
obj.WriteStr(sArgs, "", "UTF-8")
Free(obj)
# ждем, пока ExifTool создаст файл (цикл ожидания)
Local WaitCount = 0
While Not FileExist("%ExifToolOut%")
Sleep 50
WaitCount = WaitCount + 1
ansi = FileRead(ExifToolOut)
if WaitCount > 50 then Break
Wend
Return ansi
EndFunc
|
Никакого интереса оно не представляет. Я и без -stay_open так могу. Зато теперь все понятно. Проблема Ауторан в том, что он почему-то выводит данные не для каждого файла, а для всех сразу. Поэтому идет задержка для всех файлов, а потом данные выводятся мгновенно.
Время ожидания задается кодом ожидания. Если его убрать, данные выводятся сразу, но пустыми. Пришлось поставить 2,5 сек, чтобы все данные прочитались. Ну и обратите внимание на мелочи. /WAIT ставить обязательно. Оно никак не влияет на первоначальную задержку. Break отлично работает. Нет файла, создает его. Есть файл, очищает его. Преимущество в том, что не надо делать проверку и код сокращается до одной строки.
Осталось только проверить работу с au3. Вдруг там что-то -stay_open изменит. |
|