Русское сообщество AutoIt

  • Май 22, 2012, 14:11:30 *
  • Добро пожаловать, Гость
Пожалуйста, войдите или зарегистрируйтесь.

Войти
Расширенный поиск  

Новости:

Создана конференция в Jabber'е для обсуждения мелких вопросов касающихся AutoIt.

Всем у кого есть джаббер-клиент, могут присоединиться к конференции по адресу xmpp:autoit@conference.jabber.ru

Комната/Конференция/Чат не призвана заменить этот форум, а лишь для ускорения получения ответов на элементарные и короткие вопросы, которые возможно не требуют создания специальной темы на данном форуме. Для всех остальных, сколь-нибудь сложных и комплексных проблем - исключительно на форум. Комната является постоянной, но при заходе у пользователя будет отсутствовать право писать в общий чат.

Тема на форуме.

Реклама

Автор Тема: [Автоматизация] преобразование файлов с параметрами  (Прочитано 2315 раз)

0 Пользователей и 1 Гость смотрят эту тему.

Tosyk [?]

  • Новичок
  • *
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
Суть: кидаем на прогу (скомпилированный скрипт Autoit) исходный файл или несколько файлов и их начинает обрабатывать встроенная программа (nconvert.exe) таким выражением:

nconvert.exe -overwrite -D -c 1 -out png "ФАЙЛЫ_ИЛИ_ФАЙЛ"
на выходе получаем файлы output.png в той же папке из которой закидывали source.file

вот что у меня пока получилось из того что я знаю и что у меня есть:

Код: AutoIt [Выделить]
#NoTrayIcon

$aFiles = _Get_Files()
_Check_ScriptDir()

$aFiles = _Get_Files()
_Convert($aFiles)

Func _Convert($a_File)
    Local $s_nconvert = '"' & @ScriptDir & '\nconvert.exe" ', _
            $s_TempDir = @ScriptDir & '\_Temp\'
    For $i = 1 To $a_File[0][0]
        RunWait($s_nconvert & '"' & $a_File[$i][0] & '"', '', @SW_HIDE)
        FileMove($a_File[$i][0], $s_TempDir, 9)
        EndIf
    Next
EndFunc   ;==>_Convert

Func _Check_ScriptDir()
    Local $s_nconvert = @ScriptDir & '\nconvert.exe'
    If Not FileExists($s_nconvert) Then Exit
EndFunc   ;==>_Check_ScriptDir

Func _Get_Files()
    ...
EndFunc   ;==>_Get_Files

Очевидно, что файл nconvert.exe зашивается в exe при компиляции и вызывается в темп дериктории.
Вообще скоре похоже на "я его слепила из того что было", но всё что написано мне понятно.
У меня такие вопросы:
  • каким образом должна выглядеть функция _Get_Files()?
  • как увязать комманды -overwrite -D -c 1 -out png в скрипт?
« Последнее редактирование: Январь 18, 2012, 08:06:44 от Tosyk »



  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1403
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5068
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Tosyk  [?]
Цитата
каким образом должна выглядеть функция _Get_Files()?

Код: AutoIt [Выделить]
Func _Get_Files()
    Local $aFiles[1]
   
    For $i = 1 To $CmdLine[0]
        If $CmdLine[$i] = "png" Then
            $aFiles[0] += 1
            ReDim $aFiles[$aFiles[0] + 1]
            $aFiles[$aFiles[0]] = $CmdLine[$i]
        EndIf
    Next
   
    Return $aFiles
EndFunc
файлы должны передаваться с кавычками, чтобы избежать проблем с пробелами.

Цитата
как увязать комманды -overwrite -D -c 1 -out png в скрипт?
В смысле, что значит „увязать“?




  Записан
Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.



«Не оказываю техподдержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
CreatoR  [?]
Цитата
В смысле, что значит „увязать“?
т.е. как внедрить в скрипт эти команды?

я так понимаю в эту строку:
Код: AutoIt [Выделить]
RunWait($s_nconvert & '"' & $a_File[$i][0] & '"', '', @SW_HIDE)
но как?

вот так?:
Код: AutoIt [Выделить]
RunWait($s_nconvert & '-overwrite -D -c 1 -out png' & $a_File[$i][0] & '"', '', @SW_HIDE)

спасибо за функцию
« Последнее редактирование: Январь 18, 2012, 09:06:37 от Tosyk »



  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1403
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5068
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Tosyk  [?]
Цитата
вот так?
Почти:
Код: AutoIt [Выделить]
RunWait($s_nconvert & ' -overwrite -D -c 1 -out png "' & $aFiles[$i] & '"', '', @SW_HIDE)
и в таком случае функция «_Get_Files» должна быть немного другой:

Код: AutoIt [Выделить]
Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]
   
    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
   
    Return $aFiles
EndFunc




  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
странно, не работает.

компилю в texture_01.exe
запускаю cmd:
texture_01.exe sample_01.tgaи ничего

пробую бросить sample_01.tga на texture_01.exe и ничего

должно произойти преобразование файла

sample_01.tga и texture_01.exe в одной папке

вот полный скрипт:
Код: AutoIt [Выделить]
#NoTrayIcon

$aFiles = _Get_Files()
_Check_ScriptDir()

$aFiles = _Get_Files()
_Convert($aFiles)

Func _Convert($a_File)
    Local $s_nconvert = '"' & @ScriptDir & '\nconvert.exe" ', _
            $s_TempDir = @ScriptDir & '\_Temp\'
    For $i = 1 To $a_File[0][0]
        RunWait($s_nconvert & ' -overwrite -D -c 1 -out tga "' & $aFiles[$i] & '"', '', @SW_HIDE)
        FileMove($a_File[$i][0], $s_TempDir, 9)
    Next
EndFunc   ;==>_Convert

Func _Check_ScriptDir()
    Local $s_nconvert = @ScriptDir & '\nconvert.exe'
    If Not FileExists($s_nconvert) Then Exit
EndFunc   ;==>_Check_ScriptDir

Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]
   
    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
   
    Return $aFiles
EndFunc   ;==>_Get_Files

там в команде скрипта png исправил на tga, так правильно, первый раз ошибся
« Последнее редактирование: Январь 18, 2012, 09:37:30 от Tosyk »



  Записан

CreatoR [?]

  • Администратор
  • *
  • *****
  • Репутация: 1403
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 5068
  • Версия AutoIt: 3.2.8.1+
  • AutoIt is simple, subtle, elegant
    • WWW
    • Награды
Tosyk  [?]
Цитата
вот полный скрипт
Мне немного непонятно, почему используется двумерный массив, когда _Get_Files возвращает одномерный? :think:

Код: AutoIt [Выделить]
#NoTrayIcon

$aFiles = _Get_Files()

_Check_ScriptDir()
_Convert($aFiles)

Func _Convert($aFiles)
    Local $s_nconvert = '"' & @ScriptDir & '\nconvert.exe"', $s_TempDir = @ScriptDir & '\_Temp\'
   
    For $i = 1 To $aFiles[0]
        RunWait($s_nconvert & ' -overwrite -D -c 1 -out tga "' & $aFiles[$i] & '"', '', @SW_HIDE)
        FileMove($aFiles[$i], $s_TempDir, 9)
    Next
EndFunc   ;==>_Convert

Func _Check_ScriptDir()
    Local $s_nconvert = @ScriptDir & '\nconvert.exe'
    If Not FileExists($s_nconvert) Or $CmdLine[0] = 0 Then Exit
EndFunc   ;==>_Check_ScriptDir

Func _Get_Files()
    Local $aFiles[$CmdLine[0] + 1] = [$CmdLine[0]]
   
    For $i = 1 To $CmdLine[0]
        $aFiles[$i] = $CmdLine[$i]
    Next
   
    Return $aFiles
EndFunc   ;==>_Get_Files




  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
CreatoR  [?]
Цитата
Мне немного непонятно, почему используется двумерный массив, когда _Get_Files возвращает одномерный?
это потому что взял кусок из примера в котором участвовало 2 программы

при компиляции программа не работает.
работает только если поместить nconvert.exe в папку с .exe (nconvert.exe не записывается внутрь?, какой командой можно записать?)

это решил закоментив строку 13:
и что странно при этом создаётся папка _Temp и туда записывается преобразованный файл
« Последнее редактирование: Январь 18, 2012, 11:06:18 от Tosyk »



  Записан

beliy [?]

  • Новичок
  • *
  • Репутация: 16
  • Offline Offline
  • Пол: Мужской
  • Сообщений: 151
  • Версия AutoIt: 3.3.8.0+
    • Награды
Цитата
работает только если поместить nconvert.exe в папку с .exe
потому что в скрипте указан путь рядом с скриптом
Код: AutoIt [Выделить]
$s_nconvert = @ScriptDir & '\nconvert.exe'
Цитата
nconvert.exe не записывается внутрь?, какой командой можно записать?
посмотри в справке о  функции FileInstall




  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
beliy  [?]
Цитата
потому что в скрипте указан путь рядом с скриптом
да, понятно

Цитата
посмотри в справке о  функции FileInstall
т.е. нужно сначала записать в папку где скрипт будет видеть этот файл, а потом удалить его?

типа того?:

Код: AutoIt [Выделить]
Func _Convert($aFiles)
    Local $s_nconvert = '"' & @ScriptDir & '\nconvert.exe"', $s_TempDir = @ScriptDir & '\_Temp\'
   
    For $i = 1 To $aFiles[0]
        FileInstall('nconvert.exe', @ScriptDir & '\')
        RunWait($s_nconvert & ' -overwrite -D -c 1 -out tga "' & $aFiles[$i] & '"', '', @SW_HIDE)
        ;FileMove($aFiles[$i], $s_TempDir, 9)
    Next
EndFunc   ;==>_Convert

EDIT: проверил, файл записывается в exe при компиляции FileInstall(), но этот exe не преобразовывает файлы, подскажите куда эту функцию вставить
« Последнее редактирование: Январь 18, 2012, 18:11:13 от Tosyk »



  Записан

madmasles [?]

  • Модератор
  • *
  • *****
  • Репутация: 1426
  • Online Online
  • Пол: Мужской
  • Сообщений: 3819
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
Tosyk,
Попробуйте так. При запуске из SciTE и при компиляции файл nconvert.exe должен лежать рядом со скриптом.
Код: AutoIt [Выделить]
Func _Convert($a_Files)
    Local $s_Nconvert = 'nconvert.exe', $s_TempDir = @ScriptDir & '\_Temp\', $i_End
    If Not FileExists($s_TempDir) Then
        If Not DirCreate($s_TempDir) Then Return SetError(1)
    EndIf
    If Not FileInstall('nconvert.exe', $s_TempDir & '\' & $s_Nconvert, 1) Then Return SetError(1)
    For $i = 1 To $a_Files[0]
        $i_End = RunWait('"' & $s_TempDir & '\' & $s_Nconvert & '" -overwrite -D -c 1 -out tga "' & $a_Files[$i] & '"', '', @SW_HIDE)
        If $i_End Then Return SetError(1)
        FileMove($a_Files[$i], $s_TempDir, 1)
    Next
    FileDelete($s_TempDir & '\' & $s_Nconvert)
EndFunc   ;==>_Convert
PS
ИМХО, лучше запускать через Run() и читать то, что nconvert.exe в консоли пишет.
« Последнее редактирование: Январь 18, 2012, 21:12:30 от madmasles »



  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
madmasles
сделал так, не работает:
кидаю файл на скомпилированный exe, но ничего не происходит
кстати даже при наличии nconvert.exe рядом с скомпилированным скриптом .tga файл не обрабатывается

вот полный скрипт, который есть сейчас:




  Записан

madmasles [?]

  • Модератор
  • *
  • *****
  • Репутация: 1426
  • Online Online
  • Пол: Мужской
  • Сообщений: 3819
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
Tosyk  [?]
Цитата
сделал так, не работает
Дайте nconvert.exe и пару файлов для конвертирования.




  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
вот файлы
визуально обработанные файлы отличаются от исходных только размером (исходные ~3 мб, обработанные ~2,9мб), применяется сжатие




  Записан

madmasles [?]

  • Модератор
  • *
  • *****
  • Репутация: 1426
  • Online Online
  • Пол: Мужской
  • Сообщений: 3819
  • Версия AutoIt: 3.3.6.1 - 3.3.9.4
    • Награды
Tosyk,
А как Вы nconvert.exe bat-файлом запускаете?




  Записан

Tosyk [?]

  • Новичок
  • *

  • Автор темы
  • Репутация: 0
  • Offline Offline
  • Сообщений: 47
  • Версия AutoIt: 3.3.6.1
    • Награды
madmasles  [?]
Цитата
А как Вы nconvert.exe bat-файлом запускаете?
вот таким образом:

nconvert.exe -overwrite -D -c 1 -out tga ТУТ_ИСХОДНЫЙ_ФАЙЛ




  Записан
 


Похожие темы
Тема Автор Ответов Просмотров Последний ответ
[Автоматизация] Автокопировние файлов
Стол заказов
Krec 2 697 Последний ответ Май 23, 2011, 16:39:22
от Kaster
[Автоматизация] рекурсивный поиск файлов и преобразование +прогресс-бар
Стол заказов
Tosyk 3 755 Последний ответ Сентябрь 03, 2011, 22:44:30
от madmasles
Автоматизация скачивания файлов с сайта
Стол заказов
Meta2 0 405 Последний ответ Август 23, 2011, 11:29:44
от Meta2
[Автоматизация] Автоматическое обновление файлов
Стол заказов
sashazzz 17 2154 Последний ответ Октябрь 13, 2011, 10:47:10
от madmasles
[Автоматизация] Преобразование таблиц из псевдографики в word таблицы
Общение
Vlasssov 0 526 Последний ответ Ноябрь 17, 2011, 14:31:38
от Vlasssov
[Автоматизация] Комплексное преобразование файлов, двумя программами последовательно
AutoIt для новичков
Tosyk 12 754 Последний ответ Январь 29, 2012, 10:17:30
от Tosyk
[Автоматизация] Сортировка файлов и работа с DBF
AutoIt для новичков
serzhu 1 208 Последний ответ Февраль 13, 2012, 12:59:40
от madmasles
[Автоматизация] Запуск EXE файла с параметрами по сигналу с COM порта
Стол заказов
Elen 7 335 Последний ответ Март 11, 2012, 14:58:53
от C2H5OH
[Автоматизация] Логирование запуска программ и открытия файлов
AutoIt для новичков
ildary 0 134 Последний ответ Март 24, 2012, 12:00:35
от ildary
Автоматизация файлов на сайт minus.com
AutoIt для новичков
Arei 6 323 Последний ответ Май 18, 2012, 21:50:02
от Arei


Реклама

* Последние сообщения на форуме
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Arei Сегодня в 13:24:59
post Re: Смена IP адресса
[AutoIt для новичков] Zaramot Сегодня в 13:04:33
post Re: Авторизация в одноклассниках
[Автоматизация IE и Web-интерфейса] Александр Сегодня в 12:59:21
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 12:23:31
post [Мышь, клавиатура] Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] Nurgazy Сегодня в 12:09:36
post Re: Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] madmasles Сегодня в 12:08:03
post Объясните плз, как работать с массивами ArrayAdd и прочее...
[AutoIt для новичков] webmonster Сегодня в 12:03:38
post Re: Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] ---Zak--- Сегодня в 11:39:56
post Как заменить метку времени файла на севере
[Автоматизация IE и Web-интерфейса] eropov Сегодня в 11:26:37
post Re: Выполнение скрипта при нажатии средней кнопки мыши
[AutoIt для новичков] madmasles Сегодня в 11:13:16

* Пользователи онлайн
  • Dot Гостей: 127
  • Dot Скрыт: 2
  • Dot Пользователей: 32
  • Dot Пользователи Online: