Автор Тема: как указать чтобы после операции Rar.exe не закрывал свою консоль?  (Прочитано 5101 раз)

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

Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
раньше использовался bat и там просто указывалась второй строкой pause, а как задержать окно консоли используя rar через autoit? желательно с использованием ShellExecuteWait.
по поиску я встречал примеры с использованием Run() с @ComSpec /c, но толи rar не дружит с таким форматом команды, толи как всегда я чегото недопонял.  :-\

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


Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8083
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
RunWait(@ComSpec & ' /C Rar.exe & Pause')

?
 :think:


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


AutoIt is simple, subtle, elegant.


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


Мои работы

Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
да, это работает. но это совсем не тоже(нужно печатать exit) что pause(нажам пробел и всё). в итоге:
Код: AutoIt [Выделить]
$check = ShellExecuteWait(@TempDir & "\rar.exe", "u -s -ac -m3 -ep1 profile.rar " & $param, "", "", @SW_SHOW)

превратилось в
Код: AutoIt [Выделить]
$check = RunWait(@ComSpec &" /C " &@TempDir & "\rar.exe u -s -ac -m3 -ep1 profile.rar " & $param, "", @SW_SHOW)

а оно в свою очередь, в попытке сделать закрытие удобным, в
Код: AutoIt [Выделить]
$check = Run(@ComSpec &" /C " &@TempDir & "\rar.exe u -s -ac -m3 -ep1 profile.rar " & $param, "", @SW_SHOW)
...
Send("exit",1)

и вот на месте ... были попытки дать понять send когда же передавать этот exit  :wacko:

но даже это всё оказалось не главной проблемой = в последствии $check должна была отправлять на проверку успешности выполнения, а после всех этих изменений передаются не rar exit code, а нечто неизвестное(хоть и тоже числовое).в принципе это естесственно- ведь на запуск идет cmd, а не rar  :-\

иными словами, мне кажется это неудобным решением..

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


Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
eil,
А может лучше запускать rar.exe в скрытом режиме и читать, что он в консоли пишет.

Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
madmasles,
немного не понял предложения.. запускать какой из команд, и как тогда читать консоль если в скрытом режиме? или имеется в виду добавить операций для получения информации из консоли и вывода в скрипте -но тогда, думается, это еще длинее выходит.

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


Оффлайн Zaramot [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1160
  • Репутация: 656
  • Пол: Мужской
  • I ♥ AutoIt
    • Награды
  • Версия AutoIt: 3.3.8.1
А если с помощью AutoIt создать bat-файл и запустить его, а после окончания - удалить его ?
Примерно так:
Код: AutoIt [Выделить]
;Код BAT файла
$Code = 'Start ' & FileGetShortName(@TempDir & "\rar.exe") & " u -s -ac -m3 -ep1 profile.rar " & $param & @CRLF & 'Pause'
;Полный адрес BAT файла
$Bat = @TempDir & '\test.bat'
;Записываем код в BAT файл
FileWrite($Bat, $Code)
;Запускаем с ожиданием
ShellExecuteWait($Bat)
;Удаляем BAT файл
FileDelete($Bat)

« Последнее редактирование: Сентябрь 20, 2011, 19:39:53 от Zaramot »

Оффлайн madmasles [?]

  • Глобальный модератор
  • *
  • Сообщений: 7790
  • Репутация: 2317
  • Пол: Мужской
  • Награды За модерирование форума
    • Награды
  • Версия AutoIt: 3.3.x.x
eil  [?]
Цитировать
немного не понял предложения.
Примерно так, у меня работает:
Код: AutoIt [Выделить]
#include <Constants.au3>

$sRead = ''
$sPersent = ''
$sPersentOld = ''
$sFile = @ScriptDir & '\Test.avi'
$sRarName = StringRegExpReplace($sFile, '.*\\|\.[^.]*$', '')
$sRar = @ScriptDir & '\Rar.exe'
If StringInStr($sFile, Chr(32)) Then
    $sFile_1 = '"' & $sFile & '"'
Else
    $sFile_1 = $sFile
EndIf
If StringInStr($sRar, Chr(32)) Then $sRar = '"' & $sRar & '"'

$iPid = Run($sRar & ' a ' & $sRarName & ' ' & $sFile_1, '', @SW_HIDE, $STDOUT_CHILD)
If Not $iPid Then
    MsgBox(16, 'Error', 'Error')
    Exit
EndIf
ProgressOn('Архивация', StringRegExpReplace($sFile, '^.*\\', ''), '0%' & @TAB & _GetSize(0), 50, 50, 16)
While 1
    $sRead &= StdoutRead($iPid)
    If @error Then ExitLoop
    $sPersent = StringRegExpReplace($sRead, '(?s).*?(\d{1,3})%$', '$1')
    If @extended = 1 Then
        If $sPersentOld <> $sPersent Then
            $sPersentOld = $sPersent
            ConsoleWrite($sPersentOld & '%' & @LF)
            ProgressSet(Number($sPersentOld), $sPersentOld & '%' & @TAB & _GetSize(FileGetSize(@ScriptDir & '\' & $sRarName & '.rar')))
        EndIf
    EndIf
    Sleep(10)
WEnd
ConsoleWrite($sRead & @LF)
If StringInStr($sRead, 'OK') Then
    ProgressSet(100, '100%' & @TAB & _GetSize(FileGetSize(@ScriptDir & '\' & $sRarName & '.rar')), 'OK')
    Sleep(3000)
    ProgressOff()
Else
    ProgressOff()
    MsgBox(16, 'Error', 'Error')
EndIf

Func _GetSize($i_Size, $i_Float = 2, $i_Lang = 0)
    Local $a_Letters[4][2] = [['б', 'b'],['кб', 'kb'],['Мб', 'Mb'],['Гб', 'Gb']], _
            $s_Format = '%.' & $i_Float & 'f %s'

    If $i_Size < 0 Then $i_Size *= -1
    Switch $i_Size
        Case 0 To 1023
            Return StringFormat($s_Format, $i_Size, $a_Letters[0][$i_Lang])
        Case 1024 To 1048575
            Return StringFormat($s_Format, $i_Size / 1024, $a_Letters[1][$i_Lang])
        Case 1048576 To 1073741823
            Return StringFormat($s_Format, $i_Size / (1024 * 1024), $a_Letters[2][$i_Lang])
        Case Else
            Return StringFormat($s_Format, $i_Size / (1024 * 1024 * 1024), $a_Letters[3][$i_Lang])
    EndSwitch
EndFunc   ;==>_GetSize


Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Zaramot, была и такая мысль, но 1- поменьше хочется прибегать к сторонним файлам; 2- уже все реализовано через ShellExecute и сильно менять будет жуть  :wacko:
madmasles, пример мощный. я бы даже сказал очень мощный(не на час разбирательства ;D).
я то думал просто какойто параметр и пару команд добавить, а оно вон во что вылилось..  :blink: а ведь уже по сути написал утилитку для бэкапа, и просто в конце подумал "а чего бы не сделать показ консоли опциональным(а не скрытым всегда)".
спасибо за предложения, буду думать.

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


Оффлайн Yuriy [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 737
  • Репутация: 281
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Код: AutoIt [Выделить]
$Var1 = RunWait("C:\Program Files\WinRAR\Rar.exe t -p111222333  C:\Documents and Settings\user_01\Рабочий стол\file.rar")
; тест запароленного архива их командной строки с верным паролем (т.е. file.rar - архив с паролем 111222333)
MsgBox(64, "Is $Var1", $Var1)
; смотрим возврат
$Var2 = RunWait("C:\Program Files\WinRAR\Rar.exet -p344 C:\Documents and Settings\user_01\Рабочий стол\file.rar")
; тест запароленного архива их командной строки с плохим паролем
MsgBox(64, "Is $Var2", $Var2)
; смотрим возврат


Из справки WinRar

В случае успешного завершения операции RAR заканчивает работу с
    нулевым (0) кодом возврата. Ненулевой код возврата означает, что
    произошла какая-то ошибка. (Коды возврата можно использовать,
    например, в пакетных файлах, анализируя их с помощью переменной
    ERRORLEVEL.)

       0   УСПЕШНОЕ         Работа завершена без ошибок.
           ЗАВЕРШЕНИЕ
Это к теме? Или мимо?


Добавлено: Сентябрь 20, 2011, 21:46:22
Код: AutoIt [Выделить]
$Var1 = RunWait("C:\Program Files\WinRAR\Rar.exe t -p111222333  file.rar")
; тест запароленного архива их командной строки с верным паролем (т.е. file.rar - архив с паролем 111222333)
MsgBox(64, "Is $Var1", $Var1)
; смотрим возврат
$Var2 = RunWait("C:\Program Files\WinRAR\Rar.exe t -p344 file.rar")
; тест запароленного архива их командной строки с плохим паролем
MsgBox(64, "Is $Var2", $Var2)
; смотрим возврат

То же самое.
Только точнее.
file.rar в данном случае - в директории скрипта
Тестировал на WinRar 4.01
« Последнее редактирование: Сентябрь 20, 2011, 21:51:03 от Yuriy, Причина: Объединение сообщений »

Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Yuriy, ну сам факт того что winrar имеет возвратные коды, это к теме немного относится. но приведенный код, к моей ситуации, извини нет. ;)

Оффлайн Yuriy [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 737
  • Репутация: 281
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Вот еще варианты.
Код: AutoIt [Выделить]
RunWait(@ComSpec & " /k Rar.exe t -p111  file.rar")
; тест запароленного архива
ShellExecuteWait(@ComSpec, "/k Rar.exe t -p111  file.rar")


Оффлайн eil [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
@ComSpec, " /k "= оставляет консоль, это да. но т.к. была запущена консоль, а не rar, то нет никаких возвратных кодов -потому это не вариант.

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


 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
2019 Просмотров
Последний ответ Декабрь 02, 2014, 02:19:18
от madmasles
11 Ответов
2990 Просмотров
Последний ответ Сентябрь 28, 2015, 11:32:36
от TorvaldGot
0 Ответов
583 Просмотров
Последний ответ Сентябрь 23, 2015, 12:22:05
от madmasles
2 Ответов
1279 Просмотров
Последний ответ Сентябрь 30, 2015, 08:25:30
от madmasles
26 Ответов
5230 Просмотров
Последний ответ Декабрь 28, 2015, 10:12:25
от Yashied
3 Ответов
1333 Просмотров
Последний ответ Июнь 02, 2016, 10:51:21
от Alofa
2 Ответов
602 Просмотров
Последний ответ Сентябрь 29, 2017, 17:31:41
от perven1
0 Ответов
388 Просмотров
Последний ответ Октябрь 13, 2017, 17:24:38
от Tyr
7 Ответов
1069 Просмотров
Последний ответ Октябрь 30, 2017, 11:29:22
от cerber412
0 Ответов
735 Просмотров
Последний ответ Август 27, 2018, 02:58:12
от seriousstas