使用命令 compress-archive 根据名称压缩文件夹的 Powershell 脚本

Powershell script to zip folder base on their name with the command compress-archive

我正在尝试将目录中的每个文件夹压缩成同名的 zip

我尝试了简单的压缩归档命令

Compress-Archive $targetFolderPath -Destination $zipFolder -Update

但它只给我一个名为“.zip”的 zip,里面有我的所有文件夹,这不是我想要的

然后我找到了这个,这是我最好的尝试:

Get-ChildItem $targetFolderPath -Directory | foreach { compress-archive $_ $_.basename -update}

我为一个 zip 文件找到了一个正确名称的文件夹,这很好,但是我无法选择目标目录

任何人都可以看到我需要做些什么来制作这个 运行 吗?

谢谢

这是我想出的。如果需要,您仍然可以将其转换为 one-liner,但我更喜欢更冗长一点,因为代码更易于阅读。

$Folders = @(Get-ChildItem $TargetFolderPath -Directory)

foreach ($Folder in $Folders) {

    $Zipfile = Join-Path -Path $ZipFolder -ChildPath ($Folder.name + '.zip')

    try {
        Compress-Archive `
            -Path $Folder.FullName `
            -DestinationPath $Zipfile `
            -CompressionLevel Fastest `
            -Update `
            -ErrorAction Stop
    } catch {
        Write-Warning "Unable to archive $($Folder.FullName): $($_.Exception.Message)"
    }
}