PowerShell文件重命名和计数器问题

时间:2015-03-11 14:16:14

标签: powershell rename counter

我制作了一个非常简单的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

1 个答案:

答案 0 :(得分:0)

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

$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我们会过滤所有包含"卡"的文件。命名约定并解析数字。这些数字中的当前最高值为$highestNumber

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

已知警告

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