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