I have a folder with more than 1000 file extensions.
This is a sample of my files.
I want to zip them according to the first 3 letters. For the sample, I am looking to get two zip files, one for AFG.zip, and AGO.zip.
I was able to compress one file using the following, but the resulting folder returns with the directory name "countries" instead of the file name:
$compress = @{
LiteralPath= "C:\Countries"
CompressionLevel = "Fastest"
DestinationPath = "C:\Countries\Draft.Zip"
}
Compress-Archive @compress
I also tried the following to group the files and compress them:
Get-ChildItem C:\Countries |
Group-Object -Property { $_.Name.Substring(0, 3) } |
% { Compress-Archive -Path $_.Group -DestinationPath "$($_.Name).zip" }
But I am getting the following errors:
[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
I believe the error has to do with the third line: > { Compress-Archive -Path $.Group -DestinationPath "$($.Name).zip" }, but not sure how to fix it. I also tried some other code to do this, as this is kind of a popular question but they don't seem to work. I just started to use powershell for this, thank you for any help.
I am using powershell x86.
I was able to zip each of my files thanks to @guiwhatsthat comment. This is the fixed code:
Get-ChildItem C:\Folder |
Group-Object -Property { $_.Name.Substring(0, 3) } |
% { Compress-Archive -Path $_.Group.FullName -DestinationPath "$($_.Name).zip" }