27

Я использую 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

Можно ли отключить этот вывод (то есть я не хочу ничего печатать)?

5 ответов5

27

Просто добавьте > NUL: в конец вашей команды.

13

Вы можете использовать команду -bs, чтобы контролировать направление вывода. Чтобы остановить что-либо, кроме вывода ошибок, я бы добавил -bso0 -bsp0 .

11

Настоятельно рекомендуется просматривать сообщения о состоянии в процессе. Чтобы избежать длинных сообщений, отображать только подтверждения:

...\right_path\7z a output_file_name.zip file_to_be_compressed | findstr /b /r /c:"\<Everything is Ok" /c:"\<Scanning" /c:"\<Creating archive"
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. Другие форматы архивов могут создавать другие сообщения, кроме "Сжатие". Извлечение, вероятно, также приведет к появлению разных сообщений. Но вы можете легко адаптировать фильтр к вашим потребностям.

Более сложной идеей было бы перенаправить весь вывод в буфер и распечатать его только в том случае, если команда возвращает код завершения ошибки. Это метод, который работает со всеми командами, которые позволяют перенаправлять и обеспечивают точный код завершения ошибки.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .