我正在尝试提取一堆 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, ValueFromPipelineByPropertyName)]
[Alias('FullName')]
[string] $Path,
[Parameter()]
[string] $OutputPath,
[Parameter()]
[string] $Password
)
process {
$params = @(
'e'
if ($OutputPath) {
'-o' + $PSCmdlet.GetUnresolvedProviderPathFromPSPath($OutputPath)
}
'-y'
if ($Password) {
'-p' + $Password
}
$PSCmdlet.GetUnresolvedProviderPathFromPSPath($Path)
)
& 'C:\Program Files\7-Zip\7z.exe' @params
}
}
然后你可以像这样使用它:
Expand-7zip F:\NHSFTP\WH_20240803_1.7z -OutputPath E:\ -Password xYxYxYx
为了提取多个文件,您可以将输出从
Get-ChildItem
通过管道传送到此函数(考虑在本示例中所有文件都具有相同的密码):
Get-ChildItem F:\NHSFTP\ -Filter *.7z | Expand-7zip -Password xxxxx