Как отключить выход 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 "чтобы избавиться от списка файлов, но сохранил другие сообщения о состоянии.
Дункан Смарт

5

Улучшая ответ Bruno Dermario , я хотел также сообщать об ошибках и иметь возможность проверять их вручную.

...\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.