使用PowerShell按顺序重命名pdf文件



我有大量的pdf需要按顺序重命名。这些最初被扫描到单个文档中,然后提取为单独的文件。提取后,名称变为"444026-444050 1"、"444026-444050 2"等。我正在尝试重命名所有文件以匹配文档编号("444026-444050 1"将变为"444026"(。

我找到了可以在 Powershell 中使用的以下代码行,但似乎任何超过 9 个文件的内容都有问题!一旦我尝试使用 10 个文件,只有第一个文件被正确保存。其余的变得混乱(文件 444027 包含文件444035的内容,然后文件444028具有444027,444029具有444028,等等(

我想循环存在某种问题,但很难修复它。

有人可以帮忙吗? 谢谢

Dir *.pdf | ForEach-Object  -begin { $count=26 }  -process { rename-item $_ -NewName "4440$count.pdf"; $count++ }

好吧。 让我们看看这是否让每个人都开心。 也许您应该尝试使用文件的备份副本。

# make some test files in a new folder
# 1..20 | foreach {
#   if (! (test-path "44026-44050 $_.pdf")) { 
#     echo "44026-44050 $_" > "44026-44050 $_.pdf" }
# }
# rename and pad the first 9 old filenames with a 0 before the last digit for sorting
# is it less than 100 files?
1..9 | foreach {
ren "44026-44050 $_.pdf" "44026-44050 0$_.pdf" -whatif
}
# make dir complete first with parentheses for powershell 5
# pad $count to 2 digits
# take off the -whatif if it looks ok
(dir *.pdf) | foreach { $count = 1 } {
$padded = $count | foreach tostring 00
rename-item $_ -newname 4440$padded.pdf -whatif; $count++ }

Dir (Get-ChildItem 的别名( 检索项目的顺序似乎没有严格保证。此外,如果它正在排序,它可能将它们排序为字符串,"444026-444050 10"在"444026-444050 2"作为字符串之前。可能值得将 SortObject 插入管道并使用 Split 来获取您关心的序列号:

Dir *.pdf | Sort-Object -Property {[int]$_.Name.Split()[1].Split(".")[0]} | ForEach-Object  -begin { $count=26 } -process { rename-item $_ -NewName "4440$count.pdf"; $count++ }

关键部分是在Dir之后和ForEach-Object之前插入的这个新的管道阶段:

Sort-Object -Property {[int]$_.Name.Split()[1].Split(".")[0]}

这表示根据第一个空格和后续句点之间的任何内容对Dir的输出进行排序,将这些内容作为整数(而不是字符串(进行比较。这可确保您的结果按顺序排列,并且您将按数字顺序而不是字典顺序获取它们。

最新更新