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

Unzip archive zip file into folder with same name as archive zip file

我能够使用 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 命令的开关,但找不到任何开关。

谢谢

您可以执行以下操作(我无法使用 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
}

解释:

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

Join-Path 用于将路径与子路径连接起来。此处的子路径将是每次迭代期间 $fileBaseName 值。

Test-Path is used to verify if a path already exists. If the $target path does not exist, it will be created due to the New-Item命令。


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

$target = $file.FullName -replace '\.zip$'