我尝试递归查找扩展名为.raw的所有文件,然后按照CreationTime的升序对它们进行排序。我想将每个文件复制到一个新目录,其中文件名为IMG_001_0001.jpg ..IMG_001_0099.jpg,我使用4位数字按升序排列。jpg是创建的第一个文件,如果有99个文件,则IMG_001_0099.jpg是创建的最后一个文件。
我试过这个:
Get-ChildItem 'F:\Downloads\raw-20221121T200702Z-001.zip' -Recurse -include *.raw | Sort-Object CreationTime | ForEach-Object {copy $_.FullName F:\Downloads\raw-20221121T200702Z-001.zip/test/IMG_001_$($_.ReadCount).jpg}
2条答案
按热度按时间insrf1ej1#
如果我理解正确的话,你可以这样做:
使用
D4
作为格式字符串可以确保整数用4位数表示。有关详细信息,请参阅Custom numeric format strings。正如您所注意到的,这里没有使用
ForEach-Object
枚举每个文件,而是使用延迟绑定脚本块为目标文件生成新名称,并且每个源对象都是从管道绑定的。值得注意的是,
/test/
中的正斜杠可能会带来问题,可能应该改为反斜杠:\test\
.y4ekin9u2#
你不需要哈希表来迭代.... a.只需要使用
[int]
。为了清楚起见,请不要在这里使用路径,因为路径很容易被误认为是文件而不是目录名。
Get-Childitem
不适用于文件,如果适用,则不可移植。此外,-Destination的脚本块不太可能工作,因为在它外部定义的参数在内部不可用,也不需要延迟任何东西。
像这样的东西应该是完全足够的:
(Try如果可能,使用
foreach($var in $list) {commands}
,它比foreach-object快大约10倍。)