我在当前目录中有如下文件:
现在我想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”。