Привет всем.
По работе понадобилось конвертировать большое количество файлов из одного формата в другой.
Пакетного конвертера который бы выполнил мою задачу я ненашёл, поэтому пришлось изголяться непосредственно с приложением в котором есть такая возможность используя обычные команды меню и горячие клавиши (открывая последовательно сначала один файл: выполняя ряд действий, "импорт",..."экспорт" ;затем открывая второй файл и т. д....)
Проблему решил написав следующий скрипт
Код:
Код: Выделить всё
; выбор одного или нескольких файлов
$files = FileOpenDialog("Пакетное конвертирование файлов", "c:\", "любые файлы (*.*)", 1 + 4 ) & "|"
; если ничего не выбрано то выходим
If @error Then
TrayTip("пакетная обработка файлов", 'Выход', 5, 3)
MsgBox(16,"Информация","Ничего не выбрано", 7)
Exit
EndIf
$dir_in = StringMid($files,1, StringInStr($files, "\",0,-1))
$Chetchik=1
While $Chetchik<3
$sch=StringInStr( $files,"|",0,$Chetchik)
if $sch<>0 Then
$Chetchik=$Chetchik+1
Else
ExitLoop
endif
WEnd
; рисуем цикл для двух типов выделений
if $Chetchik>2 Then
; группа файлов
$i=1
While StringLen($files)>$i
$dir_in = StringReplace(StringReplace(StringMid($files,1, StringInStr($files, "|",0,1)), "|", "\"), "\\", "\")
$name=StringMid(StringMid($files,StringInStr ( $files,$dir_in)+2 ),StringInStr(StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i)+1,StringInStr( StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i+1) - StringInStr( StringMid($files,StringInStr ( $files,$dir_in)+2 ),"|",0,$i)-1)
if StringLen($name)>0 Then
$i=$i+1
prt_to_dwg($name)
Else
ExitLoop
endif
WEnd
Else ; один файл
$name=StringTrimRight(StringMid($files,StringInStr($files,$dir_in)+StringLen($dir_in)),1)
prt_to_dwg($name)
EndIf
; конец выполнения программы
TrayTip("пакетная обработка файлов", 'Конец', 5, 1)
MsgBox(64, "Информация", "Все опрации завершены" )
; функция обработки файла
Func prt_to_dwg($value)
$value = $value
TrayTip("пакетная обработка", 'обработка файла "' & $value & '"', 10, 1)
; для примера откроем блокнот
Run("notepad")
WinWait("Безымянный")
WinActivate("Безымянный")
Send("^o")
WinWait("Открыть")
WinActivate("Открыть")
Sleep(100)
ControlSetText("Открыть", "", "Edit1", $dir_in & $value)
Sleep(5000)
WinClose("Открыть")
WinClose("Безымянный")
WinWaitClose("Безымянный")
EndFunc
Сейчас осенила мысль - неплохо бы написать к этому скрипту GUI
с прогресс баром, возможностью выбора входящих и исходящих папок до и после обработки + возможность
использовать включающий и исключающий фильтр в названиях обрабатываемых файлов.
Посему вопрос: не делал ли кто нибудь нечто похожее? Неохота изобретать велосипед
