Что нового

Влияние @SW_HIDE на результат выполнение батника

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gora [?]
Пароль изначально не определен и такой вывод архиватора - это стандартная ситуация. В этом случае в переменную $sMetod нужно записать 'Method = LZMA2 LZMA'.
А я об этом должен был догадаться? :whistle:
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
madmasles
Я об этом писал ранее:
gora [?]
Этот файл создает архиватор всегда кроме случая запароленного архива. Пароль в примере указан произвольный и служит для подавления окна запроса пароля, если попадается запароленный архив. Если архиватор не смог создать этот файл, то создается файл-заглушка с одной строкой.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gora [?]
Я об этом писал ранее:
Я про это забыл уже, а всю тему не перечитывал. :smile:
Можно так попробовать:
Код:
#include <Constants.au3>

$s7zip = @ScriptDir & '\7z.exe'
$sTest = @ScriptDir & '\Test.7z'
$sPass = 'gora'
$sLog = ''
$sTitle = 'Реальные данные из архива'
$pid = Run('"' & $s7zip & '" l "' & $sTest & '" -p' & $sPass, '', @SW_HIDE, $STDOUT_CHILD)
If Not $pid Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
While 1
	$sLog &= StdoutRead($pid)
	If @error Then ExitLoop
	If StringLen($sLog) >= 1000 Then ExitLoop
	Sleep(10)
WEnd
If ProcessExists($pid) Then
	ProcessClose($pid)
EndIf

If Not StringInStr($sLog, 'Error') Then
	$sMethod = StringRegExpReplace($sLog, '(?s).*?(Method.*?)\r\n?.*', '\1')
	If @extended <> 1 Then
		$sMethod = 'Method = LZMA2 LZMA'
		$sTitle = 'Не смог прочитать архив'
	EndIf
Else
	$sMethod = 'Method = LZMA2 LZMA'
	$sTitle = 'Не смог прочитать архив'
EndIf

MsgBox(64, $sTitle, $sMethod)
 
Автор
G

gora

Знающий
Сообщения
315
Репутация
19
madmasles
Не подходит. :(
В нормальном выводе архиватора до искомой строки дважды выводится полный путь\имя архива. Поменяем в Вашем примере одну строку:
Код:
$sTest = @ScriptDir & '\Test Method Error 1.7z'
... и поиск в выводе по ключевым словам выдаст неверный результат.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gora [?]
и поиск в выводе по ключевым словам выдаст неверный результат.
Это я не подумал. :-[
Так, вроде, без ошибок
Код:
#include <Constants.au3>

$s7zip = @ScriptDir & '\7z.exe'
$sTest = @ScriptDir & '\Test Method = Error 1.7z'
$sPass = 'gora'
$sLog = ''
$sTitle = 'Реальные данные из архива'

;$sExt = StringRegExpReplace($sTest, '^.*\.', '')
$pid = Run('"' & $s7zip & '" l "' & $sTest & '" -p' & $sPass, '', @SW_HIDE, $STDOUT_CHILD)
If Not $pid Then
	MsgBox(16, 'Error', 'Error')
	Exit
EndIf
While 1
	$sLog &= StdoutRead($pid)
	If @error Then ExitLoop
	If StringLen($sLog) >= 1000 Then ExitLoop
	Sleep(10)
WEnd
If ProcessExists($pid) Then
	ProcessClose($pid)
EndIf
;$sMethod = StringRegExpReplace($sLog, '(?s).*?' & $sExt & '\r\n(Method.*?)\r\n?.*', '\1')
$sMethod = StringRegExpReplace($sLog, '(?s).*?\r\n(Method.*?)\r\n?.*', '\1')
If @extended <> 1 Then
	$sMethod = 'Method = LZMA2 LZMA'
	$sTitle = 'Не смог прочитать архив'
EndIf
MsgBox(64, $sTitle, $sMethod)
MsgBox(64, '', $sLog)
 
Верх