我正在尝试提取一堆 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
这里没有理由使用
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