J'utilise la version 7z 18.05 et je voudrais ne lister que les noms de fichiers d'un contenu d'archive.
Si j'utilise la commande 7z l myArchive.7z
j'obtiens ce résultat: p>
7-Zip 18.05 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-04-30 Scanning the drive for archives: 1 file, 146863932 bytes (141 MiB) Listing archive: myArchive.7z -- Path = myArchive.7z Type = 7z Physical Size = 146863932 Headers Size = 393 Method = LZMA:26 Solid = + Blocks = 1 Date Time Attr Size Compressed Name ------------------- ----- ------------ ------------ ------------------------ 2017-12-06 08:55:47 D...A 0 0 myArchive 2017-12-06 08:55:42 D...A 0 0 myArchive\folder 2017-12-05 19:50:41 ....A 21816530 146863539 myArchive\folder\Test.dat 2017-12-06 08:55:42 ....A 21877463 myArchive\folder\Test2.dat 2017-12-05 19:51:05 ....A 153953 myArchive\folder\Test3.dat 2017-12-05 19:50:41 ....A 4193 myArchive\folder\Test4.dat 2017-12-06 08:55:47 ....A 24128956 myArchive\log.txt 2017-12-06 08:55:47 ....A 79980 myArchive\readme.txt 2017-12-05 19:51:05 ....A 3256759999 myArchive\folder\zTest.txt ------------------- ----- ------------ ------------ ------------------------ 2017-12-06 08:55:47 3324821074 146863539 7 files, 2 folders
Je ne sais pas pourquoi 7z n'a pas de commutateur pour lister uniquement les noms de fichiers. Comment obtenir uniquement la colonne "Nom"? Une suggestion avec une commande dos?
3 Réponses :
Si vous pouvez installer un module PowerShell sur votre machine, lister les noms de fichiers est assez simple. Cela peut être fait sur n'importe quel système Windows moderne pris en charge.
https: / /www.powershellgallery.com/packages/7Zip4Powershell/1.9.0 décrit comment installer le module.
Voici un script de fichier .bat montrant son utilisation et sa sortie.
< pré> XXXJ'ai trouvé cette réponse dans un autre fil de discussion: https://superuser.com/a/1073272/542975
Il existe un commutateur non documenté -ba
qui supprime tous les formats d'en-tête et de tableau, et ne répertorie que les entrées de ligne.
À partir de là, vous pouvez analyser chaque ligne et la diviser par espaces ou tabulations, ou éventuellement utiliser une expression régulière.
Si vous n'aimez pas le son de l'utilisation d'un commutateur de ligne de commande non documenté, vous pouvez faire ce qui suit pour analyser le nom de fichier de la sortie complète. Ce script awk détermine l'index de début de l'en-tête de colonne Name
et l'utilise pour extraire la colonne de la table.
$ix=-1; $body=$false; & 7z l your-file.7z | foreach { ` if ($ix -eq -1) {` $ix = $_.IndexOf("Name");` }` $p = $body;` if ($ix -gt 0) {` # The table body is delimited by dashed lines, after the "Name" column header has been seen` $body = ($body -ne ($_ -match ' *-[ -]+')) }` if ($p -and $body) {` # Only print if "body" was 1 before and after the previous block; otherwise, we are in` # the table body delimiter line (or outside the table completely)` write-output $_.Substring($ix)` }` }
Équivalent PowerShell:
XXX