Jak wyłączyć wyjście 7-Zip?


34

Używam 7-Zip do kompresji plików wewnątrz pliku wsadowego, takiego jak to:

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

Mam następujące dane wyjściowe:

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

Czy można wyłączyć to wyjście (tzn. Nie chcę, aby cokolwiek było drukowane)?

Odpowiedzi:


29

Po prostu dodaj > NUL:na końcu swojego polecenia.


1
Do czego służy dwukropek?
Peter Mortensen,

3
@PeterMortensen: W konsoli DOS i Windows zarezerwowane nazwy urządzeń, na przykład NULpo opcjonalnym dwukropku. O ile mi wiadomo, nie wykonuje żadnej rzeczywistej funkcji, ale służy jako wizualne przypomnienie, że jest to urządzenie i równolegle używa dwukropka po literze dysku.
Wstrzymano do odwołania.


12

Zdecydowanie zaleca się przeglądanie komunikatów o stanie. Aby uniknąć długich wiadomości, wyświetlaj tylko potwierdzenia:

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

Dzięki za findstrrozwiązanie! Wygląda na to, że możesz nieco skrócić to połączenie, pomijając /blub zarówno wewnątrz, jak \ri \<wewnątrz ciągów wyszukiwania. Poszedłbym z tym, findstr /b /c:"Everything is Ok" /c:"Scanning" /c:"Creating archive"ponieważ nie potrzebujesz tutaj wyrażeń regularnych ( /ropcja) - /bjuż szuka tylko na początku ciągów.
Oliver

jeśli chcesz użyć komunikatów o stanie do sprawdzenia, czy polecenie się powiodło, lepiej użyć kodów powrotu (w 0przypadku powodzenia i innych, które szczegółowo opisują to, co się nie powiodło). W skrypcie łatwiej jest podejmować decyzje na podstawie tych wartości niż na podstawie wiadomości.
WoJ,

1
Świetna odpowiedź. Poszedłem, ... | findstr /v /b /c:"Compressing "aby pozbyć się listy plików, ale zachowaj inne komunikaty o stanie.
Duncan Smart

5

Poprawiając odpowiedź Bruno Dermario , chciałem również zgłosić błędy i móc je sprawdzić ręcznie.

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

W przypadku, gdy PowerShell jest opcją lub ktoś mógłby jej użyć, oto co zrobiłem, w oparciu o ideę findstrodpowiedzi.

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

W normalnej pracy pozostawia to tylko wiersz „Everything is Ok”. Jeżeli wydrukowane zostanie coś nietypowego, pozostaje ono widoczne (z wyjątkiem pustych linii, które pojawiają się tak często na zwykłym wydruku).

Jest to testowane pod kątem wyjścia w formacie 7z. Inne formaty archiwów mogą generować inne komunikaty niż „Kompresowanie”. Wyodrębnianie prawdopodobnie spowoduje także powstanie różnych komunikatów. Ale możesz łatwo dostosować filtr do swoich potrzeb.

Bardziej złożonym pomysłem byłoby przekierowanie wszystkich danych wyjściowych do bufora i wydrukowanie go tylko w przypadku, gdy polecenie zwróci kod wyjścia błędu. Jest to metoda, która działa ze wszystkimi poleceniami, które umożliwiają przekierowanie i zapewniają dokładny kod wyjścia błędu.


1

Udostępnianie mojego findstrrozwiązania:

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

Tak więc oryginalne 14-liniowe wyjście:


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

zmniejsz do 4 linii:

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

zmniejsza tylko sOut, ostrzeżenia i błędy trafiają do sera, więc nadal je zobaczysz

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.