Як відключити вихід 7-Zip?


34

Я використовую 7-Zip для компресії файлів у пакетному файлі, як це:

...\right_path\7z a output_file_name.zip file_to_be_compressed

Я отримав такий результат:

7-Zip 4.65  Copyright (c) 1999-2009 Igor Pavlov  2009-02-03
Scanning

Creating archive output_file_name.zip

Compressing  file_to_be_compressed

Everything is Ok

Чи можна відключити цей вихід (тобто я не хочу, щоб щось було надруковано)?

Відповіді:


29

Просто додайте > NUL:до кінця своєї команди.


1
Для чого потрібна товста кишка?
Пітер Мортенсен

3
@PeterMortensen: У DOS та консолі Windows зарезервовані імена пристроїв, такі як, NULможе супроводжуватися необов'язковою двокрапкою. Наскільки я знаю, він не виконує жодної фактичної функції, але служить наочним нагадуванням про те, що це пристрій і паралельно використанню двокрапки після літери диска.
Призупинено до подальшого повідомлення.

17

Ви можете використовувати команду -bs для управління, куди йде вихід. Щоб зупинити що-небудь окрім помилок, я додам -bso0 -bsp0.


Це правильно, але введено у версії 7Zip 15.01 або після 9.38beta Джерело: sourceforge.net/p/sevenzip/discussion/45797/thread/8a45fa74 Фактична Synology DSM 6.1.x включає 7zip з версією 9.20 і не має такої можливості.
PeterCo

12

Настійно рекомендується в процесі перегляду повідомлень про стан. Щоб уникнути довгих повідомлень, відображайте лише підтвердження:

...\right_path\7z a output_file_name.zip file_to_be_compressed | findstr /b /r /c:"\<Everything is Ok" /c:"\<Scanning" /c:"\<Creating archive"

Дякую за findstrрішення! Схоже, ви можете дещо скоротити цей виклик, опустивши /bабо обидва рядки пошуку \rта \<всередині нього. Я б пішов з findstr /b /c:"Everything is Ok" /c:"Scanning" /c:"Creating archive"цього /rпункту, оскільки тут вам не потрібні регулярні вирази ( опція) - це /bвже пошук лише на початку рядків.
Олівер

якщо ви хочете використовувати повідомлення про стан, щоб перевірити, чи вдалася команда, краще використовувати коди повернення ( 0для успіху та інших, які детально описують, що не вдалося). У сценарії простіше приймати рішення на основі цих значень, ніж на повідомленнях.
WoJ

1
Чудова відповідь. Я пішов, ... | findstr /v /b /c:"Compressing "щоб позбутися списку файлів, але зберігати інші повідомлення про стан.
Duncan Smart

5

Удосконалюючи відповідь Бруно Дермаріо , я хотів також повідомити про помилки та мати можливість їх перевірити вручну.

...\right_path\7z a output_file_name.zip file_to_be_compressed > 7z_log.txt
type 7z_log.txt | findstr /b /c:"Everything is Ok" /c:"Scanning" /c:"Creating archive" /c:"Error"
echo.
echo (In case of Error check 7z_log.txt)
echo.

2

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

Складнішою ідеєю було б перенаправити весь вихід на буфер і надрукувати його лише у випадку, якщо команда поверне код виходу з помилки. Це метод, який працює з усіма командами, які дозволяють перенаправляти та надавати точний код виходу з помилки.


1

Спільний доступ до мого findstrрішення:

%ZIP% a -tzip %FILE% %Folder% | findstr /I "archive everything"

Отже, вихідний 14-рядковий вихід:


7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28

Scanning the drive:
4 folders, 13 files, 88957 bytes (87 KiB)

Creating archive: Releases\Archive.zip

Add new data to archive: 4 folders, 13 files, 88957 bytes (87 KiB)


Files read from disk: 13
Archive size: 33913 bytes (34 KiB)
Everything is Ok

зменшити до 4-х рядків:

Creating archive: Releases\Archive.zip
Add new data to archive: 4 folders, 13 files, 88957 bytes (87 KiB)
Archive size: 33912 bytes (34 KiB)
Everything is Ok

вона стискає лише sOut, попередження та помилки переходять до sErr, тому ви все одно їх побачите

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.