使用7-Zip和PowerShell在适当位置提取已归档文件的内容

时间:2016-08-07 18:51:32

标签: powershell 7zip lzw

我想在当前目录中提取所有* .Z文件(7-Zip支持LZW / UNIX压缩)。

我无法弄清楚为什么这不起作用。我知道如何使用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说当我想输出到同一目录但没有确定原因时没有要处理的文件,似乎Directory变量没有被传递但文件名再次没有意义。每个文件的示例输出:

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 个答案:

答案 0 :(得分:1)

-o参数应位于双引号字符串中,变量为$($var)

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