PowerShell 文件重命名和反问题

PowerShell file rename and counter issue

我制作了一个非常简单的 ps1 脚本,用 "ID" 数字重命名我的 txt 文件,例如

Card.321.txt

这适用于简单的线条,但我需要大量重命名线条,所以我需要一些不同的东西。

$i = 1
Get-ChildItem *.txt | %{Rename-Item $_ -NewName ('Card.{0:D3}.txt' -f $i++)}

但如果没有其他名为 Card.xxx.txt 的文件,我只能正确 运行 它 每天我都会收到一个新文件,在重命名后将其存储在存档文件夹中。

如何制作一个不尝试执行批量重命名任务的脚本?

我需要一个计数器,它可以从昨天使用相同脚本执行的任务继续。

Card.321.txt
Card.322.txt
Card.323.txt
Card.324.txt
Card.325.txt
ToDaysFiledToBeRenamed.txt

这样的事情怎么样。不是最有效但应该易于阅读

$thePath = "C:\temp"
$allTXTFiles = Get-ChildItem $thePath *.txt
$filestoberenamed = $allTXTFiles | Where-Object{$_.BaseName -notmatch "^Card\.\d{3}$"}
$highestNumber = $allTXTFiles | Where-Object{$_.BaseName -match "^Card\.\d{3}$"} | 
        ForEach-Object{[int]($_.BaseName -split "\.")[-1]} | 
        Measure-Object -Maximum | Select-Object -ExpandProperty Maximum

$filestoberenamed | ForEach-Object{Rename-Item $_ -NewName ('Card.{0:D3}.txt' -f $highestNumber++)}

收集所有文件并将它们分成两组。使用 $allTXTFiles 我们过滤所有具有 "Card" 命名约定的文件并解析出数字。在这些数字中,确定当前最高的数字为 $highestNumber

然后我们将剩余的文件作为 $filestoberenamed 并使用 $highestNumber 作为索引将它们放入您的 Rename-Item 片段中。

已知注意事项

如果有编号高于 999 的文件,这将无法正确执行。它允许创建一个,但目前我只查找 3 位数字的文件。我们可以将其改为 ^Card\.\d+$。取决于你想要什么样的逻辑。