在powershell中压缩同名文件

Compress files with same name in powershell

我有一个包含超过 1000 个文件扩展名的文件夹。

这是我的文件样本。

我想按前3个字母压缩。对于示例,我希望获得两个 zip 文件,一个用于 AFG.zip,一个用于 AGO.zip。

我能够使用以下方法压缩一个文件,但生成的文件夹 returns 的目录名称为“countries”而不是文件名称:

$compress = @{
LiteralPath= "C:\Countries"
CompressionLevel = "Fastest"
DestinationPath = "C:\Countries\Draft.Zip"
}
Compress-Archive @compress

我还尝试了以下方法来对文件进行分组并进行压缩:

Get-ChildItem C:\Countries | 
    Group-Object -Property { $_.Name.Substring(0, 3) } |
    % { Compress-Archive -Path $_.Group -DestinationPath "$($_.Name).zip" }

但我收到以下错误:

[ERROR] Compress-Archive : The path 'AFG.cpg' either does not exist or is not a valid file system
path.
[ERROR] At line:3 char:9
+     % { Compress-Archive -Path $_.Group -DestinationPath "$($_.Name). ...
+         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (AFG.cpg:String) [Compress-Archive], InvalidO
   perationException
    + FullyQualifiedErrorId : ArchiveCmdletPathNotFound,Compress-Archive

我认为错误与第三行有关:> { Compress-Archive -Path $.Group -DestinationPath "$($.Name).zip" } ,但不确定如何修复它。我还尝试了一些其他代码来执行此操作,因为这是一个很受欢迎的问题,但它们似乎不起作用。我刚开始为此使用 powershell,感谢您的帮助。

我正在使用 powershell x86。

感谢@guiwhatsthat 的评论,我能够压缩我的每个文件。这是固定代码:

Get-ChildItem C:\Folder | 
    Group-Object -Property { $_.Name.Substring(0, 3) } |
    % { Compress-Archive -Path $_.Group.FullName -DestinationPath "$($_.Name).zip" }