Что нового

[Автоматизация] рекурсивный поиск файлов и преобразование +прогресс-бар

Tosyk

Новичок
Сообщения
206
Репутация
0
Версия AutoIt: 3.3.6.1

Описание:
Часто приходится прибегать в работе к такому скрипту cmd (пример конструктора схемы):
Код:
md converted

for /f "tokens=*" %%a in ('dir /b /s *.tga') do (
	tool1.exe "%%a"
	tool2.exe "%%~dpna_decompressed.tga" "%%~dpna.png"
	move "%%a" .\converted
	del "%%~dpna_decompressed.tga"
	)
После запуска скрипт рекурсивно находит указанные файлы в папках и подпапках и преобразует/обрабатывает их.
а можно ли с помощью AutoIt интерпретировать данный скрипт:
- зашив в один exe все используемые файлы/инструменты/dll
- сделать прогресс бар для процесса
?
Примечания:
в самом окне исполнения возможно сделать:
- кнопки старт, отмена, пауза
- галки для перезаписи файлов и удаления исходных файлов, т.е те что "%%a"
?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Tosyk,
Не помню, что делает %%~dpna_decompressed.tga.
Был, например, 12345.tga, а стал?
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
Й

Я подробно распишу что требуется :smile:

хотелось бы узннать как возможно сделать два режима конечной утилиты:
ПЕРВЫЙ - программа запускается двумя кликами и преоразует все файлы вглубь по каталогам
ВТОРОЙ - на exe программы перетягиваются выбранный файлы и программа преобразует только их

в ПЕРВОМ режиме:

1 - запуск программы двойным кликом
2 - программа начинает искать определённый тип файлов (*.tga, *_mge.vpn и т.д.)
Код:
for /f "tokens=*" %%a in ('dir /b /s *.tga') do (
3 - после нахождения файлов в папке с найденным файлом создаётся временная папка (допустим _temp)
Код:
md _temp
4 - программа преобразует файлы с помощью утилиты tool1.exe c параметрами:
tool1.exe "ФАЙЛ.tga"
после преобразования получаем файл ФАЙЛ_decompressed.tga
Код:
tool1.exe "%%a"
5 - программа преобразует каждый полученный ФАЙЛ_decompressed.tga с помощью утилиты tool2.exe с параметрами:
tool2.exe "ФАЙЛ_decompressed.tga" "ФАЙЛ.png"
после преобразования получаем файл ФАЙЛ.png
Код:
tool2.exe "%%~dpna_decompressed.tga" "%%~dpna.png"
6 - исходный "ФАЙЛ.tga" перемещается в папку _temp (хотя это можно сделать после п.4)
Код:
move "%%a" .\_temp
7 - промежуточный ФАЙЛ_decompressed.tga удаляется (но это можно сделать после п.5)
Код:
del "%%~dpna_decompressed.tga"

во ВТОРОМ режиме:

1 - выбранные файлы перетягиваются на exe с программой
2 - в папке с перетянутым на программу файлом создаётся временная папка (допустим _temp)
3 - далее как в ПЕРВОМ режиме с п.4

ВТОРОЙ режим более интресен, т.к. хочу сделать контекстное меню в панели виндовс для быстрого доступа
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Tosyk,
Попробуйте так, во втором режиме (надо перетаскивать файл(файлы) только на скомпилированный скрипт или его ярлык). В файле Mask.ini можно задать маски.
Утилиты tool1.exe и tool2.exe должны быть в папке со скриптом.
Код:
#NoTrayIcon

If Not @Compiled Then Exit

If WinExists(@ScriptName & '{[/@$@\]}') Then Exit
AutoItWinSetTitle(@ScriptName & '{[/@$@\]}')

If Not $CmdLine[0] Then Exit
_Check_ScriptDir()
$aFiles = _Get_Files()
If @error Then Exit
_Decompress($aFiles)

Func _Decompress($a_File)
	Local $s_Tool_1 = '"' & @ScriptDir & '\tool1.exe" ', $s_Tool_2 = '"' & @ScriptDir & '\tool2.exe" ', _
			$s_TempDir = @ScriptDir & '\_Temp\'
	For $i = 1 To $a_File[0][0]
		RunWait($s_Tool_1 & '"' & $a_File[$i][0] & '"', '', @SW_HIDE);можно Run() и читать консольный вывод
		FileMove($a_File[$i][0], $s_TempDir, 9)
		If FileExists($a_File[$i][1]) Then
			RunWait($s_Tool_2 & '"' & $a_File[$i][1] & '" "' & $a_File[$i][2] & '"', '', @SW_HIDE);можно Run() и читать консольный вывод
			FileDelete($a_File[$i][1])
		EndIf
	Next
EndFunc   ;==>_Decompress

Func _Get_Files()
	Local $s_File_INI = @ScriptDir & '\Mask.ini', $s_Section = 'Mask', _
			$a_Temp, $a_Mask[2] = [1, '.tga'], $a_Return_Array, $i_Count, _
			$s_Prefix = '_decompressed', $s_Temp

	$a_Temp = IniReadSection($s_File_INI, $s_Section)
	If Not @error Then
		ReDim $a_Mask[$a_Temp[0][0] + 1]
		$a_Mask[0] = $a_Temp[0][0]
		For $i = 1 To $a_Temp[0][0]
			$a_Mask[$i] = $a_Temp[$i][1]
		Next
	EndIf
	Dim $a_Return_Array[$CmdLine[0] + 1][3]
	For $i = 1 To $CmdLine[0]
		For $j = 1 To $a_Mask[0]
			If Not FileExists($CmdLine[$i]) Then ContinueLoop
			If StringInStr(FileGetAttrib($CmdLine[$i]), 'D') Then ContinueLoop
			If StringRight($CmdLine[$i], StringLen($a_Mask[$j])) == $a_Mask[$j] Then
				$i_Count += 1
				$a_Return_Array[$i_Count][0] = $CmdLine[$i]
				$s_Temp = StringRegExpReplace($CmdLine[$i], '\.[^.]*$', '')
				$a_Return_Array[$i_Count][1] = $s_Temp & $s_Prefix & $a_Mask[$j]
				$a_Return_Array[$i_Count][2] = $s_Temp & '.png'
			EndIf
		Next
	Next
	If $i_Count Then
		ReDim $a_Return_Array[$i_Count + 1][3]
		$a_Return_Array[0][0] = $i_Count
		Return $a_Return_Array
	EndIf
	Return SetError(1)
EndFunc   ;==>_Get_Files

Func _Check_ScriptDir()
	Local $s_Tool_1 = @ScriptDir & '\tool1.exe', $s_Tool_2 = @ScriptDir & '\tool2.exe'
	If Not FileExists($s_Tool_1) Then Exit
	If Not FileExists($s_Tool_2) Then Exit
EndFunc   ;==>_Check_ScriptDir

Пример файла Mask.ini:
Код:
[Mask]
1=.tga
2=_mge.vpn
Если этого файла нет, то будет обрабатывать файлы по маске *.tga.
Может быть ошибка при обработке по маске _mge.vpn. Как он переименовывается при распаковке tool1.exe?
 
Верх