Comment désactiver la sortie de 7-Zip?

34

J'utilise 7-Zip pour compresser des fichiers dans un fichier batch comme celui-ci:

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

J'ai obtenu la sortie suivante:

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

Est-il possible de désactiver cette sortie (c'est-à-dire que je ne veux rien imprimer)?

Misha Moroshko
la source

Réponses:

29

Ajoutez simplement > NUL:à la fin de votre commande.

En pause jusqu'à nouvel ordre.
la source
1
À quoi sert le colon?
Peter Mortensen
3
@PeterMortensen: Dans la console DOS et Windows, les noms de périphériques réservés tels que NULpeuvent être suivis de deux points facultatifs. Pour autant que je sache, il ne remplit aucune fonction réelle, mais sert de rappel visuel qu'il s'agit d'un appareil et qu'il est parallèle à l'utilisation de deux points après une lettre de lecteur.
pause jusqu'à nouvel ordre.
17

Vous pouvez utiliser la commande -bs pour contrôler où va la sortie. Pour arrêter autre chose qu'une sortie d'erreur, j'ajouterais -bso0 -bsp0.

Evan
la source
C'est correct, mais introduit dans 7Zip version 15.01 ou après 9.38beta Source: sourceforge.net/p/sevenzip/discussion/45797/thread/8a45fa74 Le Synology DSM 6.1.x actuel inclut 7zip avec la version 9.20 et n'a pas une telle option.
PeterCo
12

Il est fortement recommandé d'afficher les messages d'état dans le processus. Pour éviter les longs messages, affichez uniquement les confirmations:

...\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
la source
Merci pour la findstrsolution! Il semble que vous puissiez raccourcir quelque peu cet appel en omettant /bou à la fois le \ret l' \<intérieur des chaînes de recherche. J'irais avec findstr /b /c:"Everything is Ok" /c:"Scanning" /c:"Creating archive"puisque vous n'avez pas besoin d'expressions régulières (l' /roption) ici - /brecherche déjà uniquement au début des chaînes.
Oliver
si vous souhaitez utiliser des messages d'état pour vérifier si la commande a réussi, il est préférable d'utiliser des codes retour ( 0pour le succès et d'autres qui détaillent ce qui a échoué). Il est plus facile dans un script de prendre des décisions basées sur ces valeurs que sur des messages.
WoJ
1
Très bonne réponse. Je suis allé avec ... | findstr /v /b /c:"Compressing "pour me débarrasser de la liste des fichiers mais garder les autres messages d'état.
Duncan Smart
5

Améliorant la réponse de Bruno Dermario , je voulais également signaler des erreurs et pouvoir les vérifier manuellement.

...\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
la source
2

Dans le cas où PowerShell est une option ou que quelqu'un pourrait l'utiliser, voici ce que j'ai fait, basé sur l'idée de la findstrréponse.

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

En fonctionnement normal, cela ne laisse que la ligne "Tout va bien". Si quelque chose d'inhabituel est imprimé, il reste visible (sauf pour les lignes vides car elles apparaissent si souvent en sortie régulière).

Ceci est testé pour une sortie au format 7z. D'autres formats d'archives peuvent produire d'autres messages que "Compression". Extraire produira probablement également des messages différents. Mais vous pouvez facilement adapter le filtre à vos besoins.

Une idée plus complexe serait de rediriger toutes les sorties vers un tampon et de ne les imprimer que si la commande renvoie un code de sortie d'erreur. Il s'agit d'une méthode qui fonctionne avec toutes les commandes qui permettent la redirection et fournissent un code de sortie d'erreur précis.

ygoe
la source
1

Partager ma findstrsolution:

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

Donc, la sortie originale de 14 lignes:


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

réduire aux 4 lignes:

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

il ne rétrécit que le sOut, les avertissements et les erreurs vont au sErr, donc vous les verrez toujours

yalov
la source