如何创建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
答案 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
}