将一种类型的文件添加到一个zip文件并使用PowerShell进行清理

时间:2017-04-02 17:59:30

标签: powershell zip

如何创建PowerShell脚本以获取.BAK类型的所有文件并将其添加到ZIP文件中(我可以让我的PowerShell脚本在调用时获取一个参数来控制将容纳所有文件的ZIP文件的名称.bak文件?成功压缩后删除.bak文件。

当前目录是:

C:\SQLBackups
+- a.bak
+- b.bak
`- c.bak

目标是:

C:\SQLBackups
`- v4.14.4_backups.zip

我是PowerShell的新手,我目前的脚本将每个.bak文件压缩成一个.zip文件,这是不行的。

$filePath = "C:\SQLBackups\"
$bak = Get-ChildItem -Recurse -Path $filePath |
       Where-Object { $_.Extension -eq ".bak" }

if (-not (Test-Path "$env:C:\Program Files\7-Zip\7z.exe")) {
  throw "$env:Program Files (x86)\7-Zip\7z.exe needed"
}
Set-Alias sz "$env:ProgramFiles\7-Zip\7z.exe"

foreach ($file in $bak) {
  $name = $file.Name
  $directory = $file.DirectoryName
  $zipfile = $name.Replace(".bak", ".zip")
  sz a -t7z "$directory\$zipfile" "$directory\$name"
}

目前的输出是:

a.bak
a.zip
b.bak
b.zip
c.bak
c.zip

2 个答案:

答案 0 :(得分:1)

如果您使用的是PowerShell v5,那么您可以使用Compress-Archive功能而不是使用7zip:

$filePath = "C:\SQLBackups"
$ZipName = "v4.14.4_backups.zip"

$BakFiles = Get-ChildItem -Recurse -Path $filePath -Include *.bak

$BakFiles | Compress-Archive -DestinationPath "$filePath\$ZipName"
$BakFiles | Remove-Item -Force

答案 1 :(得分:0)

您在循环中处理的每个文件之后命名存档,因此每个文件都会进入自己的存档。如果要将所有文件放入同一存档中,请在循环外定义存档名称:

$zipfile = Join-Path $filePath 'v4.14.4_backups.zip'
foreach ($file in $bak) {
  sz a -t7z $zipfile $file.FullName
}
相关问题