使用Powershell提取7z文件

问题描述 投票:0回答:1

我正在尝试提取一堆 7z 文件。

我能够从其他 Stackoverflow 帖子中获取这两套 Powershell 脚本,但它们似乎都不起作用。

$7ZipPath = '"C:\Program Files\7-Zip\7z.exe"'
$zipFile = '"F:\NHSFTP\WH_20240803_1.7z"'
$zipFilePassword = "xYxYxYx"
$command = "& $7ZipPath e -oe:\ -y -tzip -p$zipFilePassword $zipFile"
iex $command


$7ZipPath = '"C:\Program Files\7-Zip\7z.exe"'
$zipFile = '"F:\NHSFTP\WH_20240803_1.7z"'
$zipFilePassword = "xYxYxYx"
$command = "& $7ZipPath e -oW:\ADMINISTRATION -y -tzip -p$zipFilePassword $zipFile"
iex $command

我错过了什么?

我还尝试打开多个 7z 文件,而不仅仅是一个。

我会表达这样的话吗?

$zipFile = '"F:\NHSFTP\*.7z"'

更新

这是我需要运行的(更新的脚本)吗?

$7ZipPath = 'C:\Program Files\7-Zip\7z.exe'
$zipFile = 'F:\NHSFTP\WH_20240803_1.7z'
$zipFilePassword = 'xYxYxYx'
& $7ZipPath e -oe:\ -y -tzip -p$zipFilePassword $zipFile
powershell extract 7zip
1个回答
0
投票

这里没有理由使用

Invoke-Expression
,我建议创建一个稍后可以轻松重复使用的函数。 7zip 还能够检测压缩算法,因此您可以删除
-tzip
作为参数。

function Expand-7zip {
    [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(
        'PSAvoidUsingPlainTextForPassword', '')]
    param(
        [Parameter(Mandatory)]
        [string] $Path,

        [Parameter()]
        [string] $OutputPath,

        [Parameter()]
        [string] $Password
    )

    $params = @(
        'e'
        if ($OutputPath) {
            '-o' + $PSCmdlet.GetUnresolvedProviderPathFromPSPath($OutputPath)
        }
        '-y'
        if ($Password) {
            '-p' + [System.Net.NetworkCredential]::new('', $Password).Password
        }
        $PSCmdlet.GetUnresolvedProviderPathFromPSPath($Path)
    )

    & 'C:\Program Files\7-Zip\7z.exe' @params
}

然后你可以像这样使用它:

Expand-7zip F:\NHSFTP\WH_20240803_1.7z -OutputPath E:\ -Password xYxYxYx
© www.soinside.com 2019 - 2024. All rights reserved.