У випадку, якщо 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. Інші архівні формати можуть видавати інші повідомлення, ніж "Стиснення". Витяг, ймовірно, також видаватиме різні повідомлення. Але ви можете легко адаптувати фільтр до своїх потреб.
Складнішою ідеєю було б перенаправити весь вихід на буфер і надрукувати його лише у випадку, якщо команда поверне код виходу з помилки. Це метод, який працює з усіма командами, які дозволяють перенаправляти та надавати точний код виходу з помилки.