Skif_off
|
Posted: Sat Sep 27, 2014 01:31 Post subject: |
|
|
Что меня несколько напрягает в последнее время, так это то, что я пишу: почему-то частенько решение оказывается громоздким и всё можно сделать заметно проще.
Итого, новая версия, внезапно пришло в голову:
кнопка Code: | TOTALCMD#BAR#DATA
"%COMMANDER_PATH%\AutoIt.exe" "%COMMANDER_PATH%\UTILITIES\MAFF.au3"
%P%N
AutoIt3_v10.ico
MAFF
%COMMANDER_PATH%\UTILITIES\
-1 |
сам скрипт
Code: |
;Проверяем количество параметров
If $CmdLine[0] <> '1' Then
MsgBox(4096, 'MAFF.au3', 'Проверьте параметры запуска.')
Exit
EndIf
;Пишем в переменную %COMMANDER_PATH% и %COMMANDER_EXE%
$COMMANDER_PATH = EnvGet('COMMANDER_PATH')
$COMMANDER_EXE = EnvGet('COMMANDER_EXE')
;Запускаем 7-zip с командой list и ловим все, что она выдаст
$sOut = ''
$iPID = Run('"' & $COMMANDER_PATH & '\PLUGINS\WCX\Total7zip\7z.exe" l "' & $CmdLine[1] & '"', $COMMANDER_PATH & '\PLUGINS\WCX\Total7zip', @SW_HIDE, 2)
While 1
$sOut &= StdoutRead($iPID)
If @error Then ExitLoop
WEnd
;Проверяем конец строки - DOS/Unix/Mac
Select
Case StringInStr($sOut, @CRLF) > 0
$sDelimiter = @CRLF
Case StringInStr($sOut, @LF) > 0
$sDelimiter = @LF
Case Else
$sDelimiter = @CR
EndSelect
;и разбиваем на строки, в качестве разделителя - конец строки
$aLines = StringSplit($sOut, $sDelimiter, 1)
;Рег. выражением находим имя каталога в *.maff (это точно всегда будет 13я строка вывода?)
$MaffPath = StringRegExpReplace($aLines[13], '(\d{4}.*?\s+0\s+0\s+)([a-z0-9_]+)', '\2')
;Распаковываем *.maff в %Temp%
RunWait('"' & $COMMANDER_PATH & '\PLUGINS\WCX\Total7zip\7z.exe" x "' & $CmdLine[1] & '" -o"' & @TempDir & '" -aoa', $COMMANDER_PATH & '\PLUGINS\WCX\Total7zip', @SW_HIDE)
;Открываем index.html в Lister отдельным процессом и ждем, пока завершится
RunWait('"' & $COMMANDER_EXE & '" /S=L "' & @TempDir & '\' & $MaffPath & '\index.html"', $COMMANDER_PATH)
;Грохаем папку с распакованным *.maff
If FileExists(@TempDir & '\' & $MaffPath) Then DirRemove(@TempDir & '\' & $MaffPath, 1) |
Существенно подсократил и упростил, окна и дескрипторы - на фиг (+ скорость работы, по идее, увеличится, но с таймером ломает возиться).
Комментарии исчерпывающие, не буду тратить ваше и своё время дополнительным расписыванием.
Добавлено:
Добавлена проверка параметров запуска (только количество), чтобы AutoIt не ругался непонятно и на английском на необъявленную переменную. |
|