powershell - 查找具有特定扩展名的所有文件,按创建时间对它们进行排序并使用新名称复制它们

标签 powershell

我试图递归地查找扩展名为 .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/

相关文章:

powershell - Powershell计算机的上次启动时间,显示两个不同的输出

powershell - 未收到 PowerShell 作业的结果

.net - 使用 .net 方法但不使用 powershell cmdlet 的文件

powershell - 如何使用 powershell 脚本从保存的文件恢复 Windows 中的语言设置?

powershell - 使用powershell根据另一个文件夹中的文件名批量重命名文件

function - 带字符串消息的功能,回显屏幕,更改消息的颜色

.net - 如何启动 Powershell session 并导入所有模块?

PowerShell 和 -contains 运算符

web-services - 获取 SharePoint 文档库级别的安全用户 PowerShell

Powershell 相当于 `netsh http show sslcert ipport=' 0.0.0.0 :817 2'`