【问题标题】:Powershell offset number in name of multiple files by a constant多个文件名称中的Powershell偏移数,由常量表示
【发布时间】:2021-02-17 06:59:02
【问题描述】:

我有多个来自相机的文件,名称分别为“00010001”、“00010002”等。它们是一个文件夹中的多种文件类型(JPG、CR2、xmp、MOV)(比如说 C:\camera)。

我需要在所有文件名的数字上加 10000,所以它变成“00020001”、“00020002”等。我想这可以通过 powershell 中的简单脚本来完成,但我绝对没有这方面的经验。如果有人帮助我,我将不胜感激。谢谢。

【问题讨论】:

    标签: powershell numbers add filenames offset


    【解决方案1】:

    如果代码还应处理“C:\Camera”子文件夹中的文件,您可以使用-Recurse-Include 参数:

    (Get-ChildItem -Path 'C:\Camera' -File -Include '*.JPG','*.CR2','*.XMP','*.MOV' -Recurse) | 
        Where-Object { $_.BaseName -match '\d{8}' } | 
        Rename-Item -NewName { '{0:D8}{1}' -f ([int]$_.BaseName + 10000), $_.Extension } -WhatIf
    

    如果这不应该比根文件夹“C:\Camera”更深,那么执行以下操作:

    (Get-ChildItem -Path 'C:\Camera' -File) | 
        Where-Object { $_.BaseName -match '\d{8}' -and $_.Extension  -match '\.(JPG|CR2|XMP|MOV)$' } | 
        Rename-Item -NewName { '{0:D8}{1}' -f ([int]$_.BaseName + 10000), $_.Extension } -WhatIf
    

    一旦您对代码会根据需要创建新文件名感到满意,请移除安全开关-WhatIf

    说明:

    • 获取文件夹中 BaseNames 由 8 位数字组成的文件 ($_.BaseName -match '\d{8}') 并且扩展名为 JPG.CR2.XMP.MOV
    • 将 BaseNaem 转换为整数并加上 10000
    • 使用 -f 格式运算符重新组合文件名,其中模板字符串 {0:D8}{1} 确保所有(新)数字都以零为前缀,最多 8 位

    【讨论】:

    • 我发现,如果我运行它,Get-ChildItem 会无限次地找到相同的文件,并不断向 ihem 添加 10000。执行 -WhatIf 时看起来非常好,但没有按预期工作。我认为答案是首先将文件集合抓取到一个变量中,然后将 $variable 传递给 rename-command。
    • @Daniel 发现得很好。我只测试了两个文件,一切正常。我现在用括号将Get-ChildItem cmdlet 括起来,所以代码在通过管道吐出之前完成了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-11
    • 2012-11-27
    • 2018-05-20
    • 2017-03-04
    • 2018-04-26
    相关资源
    最近更新 更多