Como desativar a saída do 7-Zip?

27

eu uso 7-Zip para compactar arquivos dentro de um arquivo de lote como este:

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

Eu tenho a seguinte saída:

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

É possível desativar essa saída (ou seja, não quero que nada seja impresso)?

Misha Moroshko
fonte

Respostas:

27

Basta adicionar > NUL: até o final do seu comando.

Dennis Williamson
fonte
1
Qual é o cólon?
Peter Mortensen
2
@ PeterMortensen: No DOS e no console do Windows, nomes de dispositivos reservados, como NUL pode ser seguido por dois pontos opcionais. Tanto quanto eu sei, ele não executa nenhuma função real, mas serve como um lembrete visual de que é um dispositivo e paralela o uso de dois pontos após uma letra de unidade.
Dennis Williamson
13

Você pode usar o -bs comando para controlar onde a saída vai. Para parar qualquer coisa, menos a saída de erro, eu adicionaria -bso0 -bsp0.

Evan
fonte
Isso está correto, mas introduzido no 7Zip versão 15.01 ou após o 9.38beta. sourceforge.net/p/sevenzip/discussion/45797/thread/8a45fa74 O Synology DSM 6.1.x inclui 7zip com a versão 9.20 e não possui essa opção.
PeterCo
11

É altamente recomendável visualizar mensagens de status no processo. Para evitar mensagens longas, exiba apenas confirmações:

...\right_path\7z a output_file_name.zip file_to_be_compressed | findstr /b /r /c:"\<Everything is Ok" /c:"\<Scanning" /c:"\<Creating archive"
Bruno Dermario
fonte
Obrigado pelo findstr solução! Parece que você pode encurtar um pouco essa chamada, omitindo /b ou ambos \r e a \< dentro das strings de pesquisa. Eu iria com findstr /b /c:"Everything is Ok" /c:"Scanning" /c:"Creating archive" já que você não precisa de expressões regulares (o /r opção) aqui - /b já procura apenas no início das strings.
Oliver
Se você quiser usar mensagens de status para verificar se o comando foi bem-sucedido, é melhor usar códigos de retorno ( 0 para o sucesso e outros que detalham o que falhou). É mais fácil em um script tomar decisões com base nesses valores do que nas mensagens.
WoJ
1
Ótima resposta. eu fui com ... | findstr /v /b /c:"Compressing " para se livrar da listagem de arquivos, mas mantenha as outras mensagens de status.
Duncan Smart
5

Melhorando Bruno Dermario resposta, também queria relatar erros e poder verificá-los manualmente.

...\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.
Ory Zaidenvorm
fonte
2

Caso o PowerShell seja uma opção ou alguém possa usá-lo, aqui está o que eu fiz, com base na idéia do findstr responda.

& $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
}

Em operação normal, isso deixa apenas a linha "Tudo está ok". Se qualquer coisa incomum for impressa, ela permanecerá visível (exceto para linhas vazias, como elas aparecem com tanta freqüência na saída regular).

Isso é testado para saída de formato 7z. Outros formatos de arquivo podem produzir outras mensagens além de "Compressão". A extração provavelmente também produzirá mensagens diferentes. Mas você pode adaptar facilmente o filtro às suas necessidades.

Uma ideia mais complexa seria redirecionar toda a saída para um buffer e apenas imprimi-lo caso o comando retorne um código de saída de erro. Esse é um método que funciona com todos os comandos que permitem redirecionar e fornecer um código de saída de erro preciso.

ygoe
fonte