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)?

Respostas:


27

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


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


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"

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.

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.