2016-08-07 9 views
0

Я хочу извлечь все * .Z-файлы в свои текущие каталоги (поддержка 7-Zip сжатия LZW/UNIX).Извлечение содержимого архивных файлов на место с помощью 7-Zip и PowerShell

Я не могу понять, почему это не работает. Я знаю, как использовать PowerShell для рекурсивного получения полного пути к имени файла и директории, в которой находится файл. Я также знаю, как использовать 7-zip для извлечения файла на место. Но попытка соединить эти два не работает. Вот что у меня есть:

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

Я также попытался:

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

и

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

Это становится файлы, которые я хочу от FullName и Directory правильный путь (no space between the o and directory is how 7-zip expects the output directory) , Однако он пытается вывести файл в путь .Z, а не в каталог. Я знаю, что это правильно, если я делаю

Get-ChildItem -Recurse *.Z | Select Directory 

Это то место, где я хочу.

Я предполагаю, что проблема не имела места, но не была уверенна, почему она получит тот же каталог. Я даже вручную определил переменную и передал ее без проблем.

Так что проблема в 7-zip говорит, что нет файлов для обработки, когда я хочу выводить в тот же каталог, но не уверен, почему, и кажется, что переменная не передается, но имя файла снова не имеет смысла. Пример вывода в файл:

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 

Он отлично работает, если я указываю один конкретный выходной каталог (без переменных), но я хочу, чтобы они извлечены на месте из-за многих подкаталогов и противоречивых имен файлов между ними.

Я хочу извлечь все * .Z файлы в свои текущие каталоги (поддержка 7-Zip сжатия LZW/UNIX).

ответ

1

Параметр -o должен быть внутри doublequoted строки с $($var) для переменных:

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

Это сделал трюк! Спасибо! –