2016-08-07 2 views
0

Je veux extraire tous les fichiers * .Z dans leurs répertoires actuels (compression LZW/UNIX 7-Zip).Extraction du contenu des fichiers archivés en utilisant 7-Zip et PowerShell

Je n'arrive pas à comprendre pourquoi cela ne fonctionne pas. Je sais comment utiliser PowerShell pour obtenir récursivement le chemin complet d'un nom de fichier et d'un répertoire dans lequel réside le fichier. Je sais aussi comment utiliser 7-zip pour extraire un fichier en place. Mais essayer de mettre ces deux ensemble ne fonctionne pas. Voici ce que j'ai:

Get-ChildItem -Recurse *.Z | foreach ($_) {7z.exe e $_.FullName -o$_.Directory} 

J'ai aussi essayé:

Get-ChildItem -Recurse *.Z | foreach ($_) {7z.exe e $_.FullName -o$($_.Directory)} 

et

Get-ChildItem -Recurse *.Z | foreach ($_) {7z.exe e $_.FullName -o${_.Directory}} 

Cela devient les fichiers que je veux par FullName et Directory est le chemin correct (no space between the o and directory is how 7-zip expects the output directory) . Cependant, il continue d'essayer de sortir le fichier sur le chemin .Z plutôt que sur le répertoire. Je sais que c'est juste si je le fais

Get-ChildItem -Recurse *.Z | Select Directory 

c'est où je veux qu'il aille.

Je suppose que le problème était de ne pas avoir d'espace mais je ne sais pas pourquoi il obtiendrait le même répertoire. J'ai même défini manuellement une variable et l'ai passée sans problème.

Donc le problème est 7-zip ne disant aucun fichier à traiter quand je veux sortir dans le même répertoire mais je ne sais pas pourquoi, et il semble que la variable Directory ne soit pas passée mais le nom du fichier n'a plus aucun sens. Exemple de sortie par fichier:

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 

Scanning the drive for archives: 
1 file, 226 bytes (1 KiB) 

Extracting archive: E:\Files\2014\more_cowbell\myfancyunixcompresseddocument.txt.Z 
-- 
Path = E:\Files\2014\more_cowbell\myfancyunixcompresseddocument.txt.Z 
Type = Z 


No files to process 
Everything is Ok 

Files: 0 
Size:  0 
Compressed: 226 

Il fonctionne très bien si je spécifie un répertoire de sortie spécifique (pas variable), mais je veux les extraits en place en raison de nombreux sous-répertoires et les noms de fichiers en conflit entre eux.

Je veux extraire tous les fichiers * .Z dans leurs répertoires actuels (compression LZW/UNIX 7-Zip).

Répondre

1

Le paramètre -o doit être dans une chaîne doublequoted avec $($var) pour les variables:

Get-ChildItem -Recurse *.z | %{ 7z e $_.FullName "-o$($_.Directory)"} 
+0

qui a fait l'affaire! Je vous remercie! –