В случае, если PowerShell является опцией или кто-то может ее использовать, вот что я сделал, основываясь на идее findstr
ответа.
& $sevenZipBin a "$archiveFile" * | where {
$_ -notmatch "^7-Zip " -and `
$_ -notmatch "^Scanning$" -and `
$_ -notmatch "^Creating archive " -and `
$_ -notmatch "^\s*$" -and `
$_ -notmatch "^Compressing "
}
if (-not $?)
{
# Show some error message and possibly exit
}
При нормальной работе это оставляет только строку «Все в порядке». Если что-то необычное печатается, оно остается видимым (за исключением пустых строк, которые часто появляются в обычном выводе).
Это проверено на вывод формата 7z. Другие форматы архива могут выдавать сообщения, отличные от «Сжатие». Извлечение, вероятно, также приведет к появлению разных сообщений. Но вы можете легко адаптировать фильтр к вашим потребностям.
Более сложной идеей было бы перенаправить весь вывод в буфер и распечатать его только в том случае, если команда возвращает код завершения ошибки. Это метод, который работает со всеми командами, которые позволяют перенаправлять и предоставляют точный код завершения ошибки.