使用 PowerShell 重命名基本名称中含有偶数的文件

使用 PowerShell 重命名基本名称中含有偶数的文件

我在当前目录中有如下文件:

现在我想2在文件基名是偶数时添加它。我的意思是我希望有:

000252.png → 000254.png
000254.png → 000256.png
000256.png → 000258.png

换句话说,这是我想要的最终结果:

我该如何使用PowerShell来实现这一点?

答案1

简短回答

假设工作目录包含要重命名的所有文件(且仅包含那些文件),下面是重命名它们的一行代码:

dir . | sort -des | % { if ($_.BaseName % 2 -eq 0 ) { mv $_ $((2 + $_.BaseName).ToString("000000") + $_.Extension) } }

解释

  • dir .列出当前目录中的文件 ( .)。dir获取子项
  • sort -des-des按名称的降序对这些文件进行排序 ( )。sort排序对象-des的缩写-Descending
  • %ForEach 对象{}它为管道中的每个项目执行一个脚本(括在花括号 ( ) 中)。
  • if ($_.BaseName % 2 -eq 0 )用于检查基本名称是否包含偶数,使用平等-eq) 和模量( %) 运算符。
  • mv移動項目,可用于重命名文件。
  • $_是个当前项目在管线中。
  • (2 + $_.BaseName)提取基本名称并添加 2。
  • .ToString("000000") 格式这个新号码带前导零(假设您总共需要六位数字)。
  • + $_.Extension添加原始文件扩大$_.Extension是管道中当前文件的扩展名,其中包括.

评论

000998.png此解决方案将重命名名为的文件001000.png(换句话说,确保总共有 6 位数字)。

答案2

$files = "C:\files"

# for each file in the directory
# sort descending. this avoids trying to rename 252 -> 254 since 254 may exist.
gci $files | sort -des | % {
    $b = $_.BaseName                    # full basename, eg 000252
    $int = $b / 1                       # cast as an int, eg 252

    # if the integer is even
    if($int % 2 -eq 0) {

        # increase the name by 2
        $newBaseName = $b -replace $int,''
        $int = $int + 2

        # prepare the new basename
        $newBaseName = $newBaseName + [string]$int + $_.Extension

        # rename the files
        rename-item $files\$_ $files\$newBaseName -WhatIf
    }
}

-WhatIf确认其正常工作后删除。

您没有将此指定为要求,因此我没有考虑到这一点,但知道名为“000998.png”的文件将被重命名为“0001000.png”,而不是“001000.png”。

相关内容