1
votes

7z liste uniquement les noms de fichiers

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?


0 commentaires

3 Réponses :


-1
votes

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é> XXX


0 commentaires

2
votes

J'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.


0 commentaires

0
votes

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


0 commentaires