#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