powershell - 使用 powershell 创建 zip
问题描述
我想使用 powershell 制作多个 zip 文件。示例:我有一个包含多个文件的文件夹,我希望将它们压缩成 4 个包。
有人可以告诉我这是否可能,如果可以,该怎么做?
谢谢
解决方案
您可以将文件分组为块,可以使用hello{number}.txt
.
$counter = 0
$groups = Get-ChildItem -Path .\helloFolder |
Sort-Object -Property @{Expression = { [int][System.IO.Path]::GetFileNameWithoutExtension($_.Name).TrimStart("hello") } } |
Group-Object -Property { [System.Math]::Floor($Script:counter++ / 4) }
为了正确排序,我们需要从文件名中提取数字前缀。我们可以使用System.IO.Path.GetFileNameWithoutExtension()
来获取文件名,然后hello
使用 . 从字符串的开头剥离System.String.TrimStart()
. 然后我们可以将其转换为[int]
并将其用作 的排序属性Sort-Object
。这将确保文件按前缀排序,因为如果您仅按文件名排序,喜欢的文件hello10.txt
自然会先排序。hello3.txt
要对文件进行分组,我们可以将计数器除以4
,然后使用 向下取整System.Math.Floor()
。然后我们可以将属性与Group-Object
.
为了更详细地解释这一点,如果我们有 8 个文件,这将进行以下分组:
# Group 1
hello1.txt -> floor(0 / 4) = 0
hello2.txt -> floor(1 / 4) = 0
hello3.txt -> floor(2 / 4) = 0
hello4.txt -> floor(3 / 4) = 0
# Group 2
hello5.txt -> floor(4 / 4) = 1
hello6.txt -> floor(5 / 4) = 1
hello7.txt -> floor(6 / 4) = 1
hello8.txt -> floor(7 / 4) = 1
它还可以处理剩余块的大小小于 4 的情况,因为它们将被添加到下一个可用组中。
然后我们可以将分块文件归档到zipfile{number}.zip
using 中,它可以接受来自Compress-Archive
的路径数组。[-Path] <string[]>
$group.Group.FullName
foreach ($group in $groups) {
Compress-Archive -Path $group.Group.FullName -DestinationPath "zipfile$([int]$group.Name + 1).zip"
}
如果您愿意,也可以将上述所有内容组合到一个管道中:
Get-ChildItem -Path .\helloFolder |
Sort-Object -Property @{Expression = { [int][System.IO.Path]::GetFileNameWithoutExtension($_.Name).TrimStart("hello") } } |
Group-Object -Property { [System.Math]::Floor($Script:counter++ / 4) } |
ForEach-Object {
Compress-Archive -Path $group.Group.FullName -DestinationPath "zipfile$([int]$group.Name + 1).zip"
}
推荐阅读
- sql - SQL 选择按 ID 分组的 Day IN 和 Day OUT
- elasticsearch - ElasticSearch - 按计划从远程重新索引,每天删除源索引
- python - 在 Python 中正确引用 JSON。字符串与整数和嵌套项
- python - 加入两个数据框,其中一个有两列要加入一列?
- docker - 无法从外部主机访问 Docker 部署的映像
- python - jinja2 格式过滤器 - 需要创建列
- c - x86 上的 Bison/Lex 段错误,但在 arm 上运行
- typescript - TypeScript 没有捕获未定义的变量?
- jquery - 如何为多个元素设置脚本
- angularjs - Angular Promise 有条件的