我制作了一个非常简单的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
答案 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+$
。取决于你想要的逻辑。