我试图递归地查找扩展名为 .raw 的所有文件,然后按创建时间的升序对它们进行排序。之后,我想将每个文件复制到一个新目录,其中名称为 IMG_001_0001.jpg ... IMG_001_0099.jpg,其中我按升序使用 4 位数字。重要的是,文件名 IMG_001_0001.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}
最佳答案
如果我理解正确的话,你可以这样做:
$count = @{ Value = 0 }
Get-ChildItem 'F:\Downloads\raw-20221121T200702Z-001.zip' -Recurse -Filter *.raw |
Sort-Object CreationTime | Copy-Item -Destination {
'F:\Downloads\raw-20221121T200702Z-001.zip/test/IMG_001_{0:D4}.jpg' -f
$count['Value']++
}
使用 D4
作为格式字符串可确保您的整数以 4 位数字表示。请参阅Custom numeric format strings了解详情。
正如您所注意到的,它不是使用 ForEach-Object
来枚举每个文件,而是使用 delay-bind script block为目标文件生成新名称,并且每个源对象都从管道绑定(bind)。
值得注意的是,/test/
中的正斜杠可能会带来问题,可能应该更改为反斜杠:\test\
。
关于powershell - 查找具有特定扩展名的所有文件,按创建时间对它们进行排序并使用新名称复制它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74525830/