让 PowerShell 压缩一堆文件夹的内容,每个文件夹都有一个单独的 ZIP 文件

让 PowerShell 压缩一堆文件夹的内容,每个文件夹都有一个单独的 ZIP 文件

我想使用 PowerShell 压缩一堆文件夹的内容,并为每个文件夹获取单独的 ZIP 文件。最近,我问如何使用 .bat 文件执行此操作并给出了答案。

for /D %%d in (*.*) do "C:\Program Files\7-Zip\7z\7za.exe" a -tzip %%d.zip %%d

然而,事实证明这只对名称中没有空格的文件夹有用。原因是批处理将执行以下操作:如果文件夹名称为“Jeff 的假期照片”,则变量将是:

%%d = Jeff's<br>
%%e = vacation<br>
%%f = pictures<br>

然后它尝试仅传递%%d给 7-Zip 程序,但该程序找不到这样的文件夹,因此不会创建 ZIP 文件。

我尝试查找一些教程、文档网站等,但还是找不到答案。也许有答案,但我想借此机会尝试使用 PowerShell。

我认为一个带有一个参数的函数(即需要压缩的子文件夹的父文件夹)将是最好的方法。

因此,这就是我所拥有的,但它不起作用,可能是由于我对 PowerShell 缺乏经验:

function zipFolders($parent) {
    $zip = "C:\Program Files\7-Zip\7z\7za.exe";
    $parents | ForEach-Object $zip a -tzip
}

答案1

您需要为 7-Zip 指定输出文件名和输入目录名,以便它正常工作。您还需要在父路径上调用 Get-ChildItem (dir) 来获取其子路径。

以下代码片段应将每个子文件夹放入$rootFolder以当前路径中的子文件夹命名的最大压缩 ZIP 文件中。

dir $rootFolder | Where-Object { $_.PSIsContainer } | ForEach-Object { C:\"Program Files"\7-zip\7z.exe a -mx9 "$_.zip" $_.FullName }

相关内容