将存档zip文件解压缩到与存档zip文件同名的文件夹中

时间:2020-03-30 12:19:13

标签: powershell unzip 7zip

我能够使用Powershell脚本成功解压缩一个压缩文件,如下所示:

$filePath = "s:\Download Data Feed\"
$zip = Get-ChildItem -Recurse -Path $filePath | Where-Object { $_.Extension -eq ".zip" } 

foreach ($file in $zip) { 
Expand-7Zip -ArchiveFileName $file -Password "Password" -TargetPath $filePath
}

Read-Host -Prompt "Press Enter to exit"

zip文件是csv文件。但是我想将csv文件解压缩到与zip文件本身相同名称的文件夹中(就像您右键单击压缩文件时一样,您可以选择将其解压缩为文件本身或相同文件夹中的文件)名称为zip文件)。我曾尝试查看Expand-7Zip命令的开关,但找不到任何开关。

谢谢

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作(我无法使用Expand-7Zip进行测试):

$filePath = "s:\Download Data Feed\"
$zip = Get-ChildItem -File -Recurse -Path $filePath | Where-Object { $_.Extension -eq ".zip" }

foreach ($file in $zip) { 
    $target = Join-Path $filePath $file.BaseName
    if (!(Test-Path $target -PathType Container)) {
        $null = New-Item -ItemType Directory -Path $target
    }
    Expand-7Zip -ArchiveFileName $file -Password "Password" -TargetPath $target
}

说明:

FileInfo集合中包含的每个$zip对象都有一个属性BaseName,它是不带扩展名的文件的名称。

Join-Path用于将路径与子路径合并。子路径将是每次迭代期间BaseName的{​​{1}}值。

Test-Path用于验证路径是否已经存在。如果$file路径不存在,将由于New-Item命令而创建。


获取目标文件夹路径的另一种方法是简单地使用正则表达式替换,这可能会更有效:

$target