首页 > 解决方案 > Compress-7zip 每个对象

问题描述

我正在尝试生成一个脚本,该脚本进入目录并将每个文件压缩为与文件同名的 .zip。

我使用 compress-archive 进行管理,但是它对最大 2gb 的文件有限制。

所以搜索,我找到了compress-7zip,但它使用不同的参数。

$InputFolder= "C:\Temp\teste"
$OutputFolder="C:\Temp\teste"

#coletando arquivos
$CsvFiles = Get-ChildItem $InputFolder -Filter '*.xlsx'

#loop compactar arquivos
$CsvFiles | ForEach-Object { 
    $zipSetName =  $_.BaseName + ".zip"
    Compress-7zip -Path $InputFolder -Format Zip -ArchiveFileName $zipSetName
}

但是我使用 compress-7zip 没有成功,上面的脚本不起作用,呵呵,我是否传递了错误的参数?手动操作可以,但是将所有文件放入一个文件中。有人可以帮助我使上述脚本工作,逐个文件压缩文件。

标签: powershell7zip

解决方案


您可以阅读此处提到的函数,包括参数名称。

在这种情况下,使用

$CsvFiles | ForEach-Object { 
    $zipSetName = [System.IO.Path]::ChangeExtension($_.FullName, '.zip')
    Compress-7zip -FullName $_.FullName -OutputFile $zipSetName -ArchiveType Zip 
}

PS我在ChangeExtension这里使用了这个方法,因为你的输入和输出路径都是一样的。如果不是这种情况,请使用

$zipSetName = Join-Path -Path $OutputFolder -ChildPath ($_.BaseName + '.zip')

推荐阅读