PowerShell:使用文件列表顺序控制重命名文件

PowerShell:使用文件列表顺序控制重命名文件

我有一个 PS 脚本,其中包括以下内容:

Get-ChildItem | foreach {
$c++
$newname = "$($c)-TZ.jpg".Padleft(10,'0')
Rename-Item $_ -NewName $newname
}                                                                                   

过去,这项任务曾在包含如下内容的文件夹上运行:

001.jpg
002.jpg
...
037.jpg

它工作正常,只需插入-TZ

但是现在我要对包含以下内容的文件夹运行它:

07.jpg
08.jpg
09.jpg
010.jpg

并且它将其放在第一位(当我想要第一个文件时,010.jpg将其重命名为,即变成)。001-TZ.jpg07.jpg001-TZ.jpg

我猜这是因为它在对文件进行排序时将数字视为字母(或者我猜您可以说是小数)。是否可以以某种方式进行更改,以便将其视为07小于010

答案1

如果仅允许文件名中的数字决定“新名称”就足够了,则不需要递增计数器。将文件名的数字部分保存到变量中,将其添加到迭代的文件对象中作为Add-Member-NotePropertyName,然后按其名称排序以获得首选排序顺序。

本质上这会将匹配的数字值用零填充至 3 个字符然后当你按对象上的这些值排序时,排序顺序将是正确的以满足您的需要。

如果你绝对需要柜台并且文件名数字本身不能用于新文件名,那么这可以让你将其重新融入到组合中仍然可以解决你的问题——按“defined”属性对结果进行排序——然后rename-item进行操作。

电源外壳

Get-ChildItem | foreach {
    ###if ($_.Name -match "\d+"){$matches}else{$false};
    ###if ($_.Name -match "\d+"){$matches.Values}else{$false};
    $cName = if($_.Name -match "\d+"){[string]$matches.Values.PadLeft(3,"0")}else{$false};
    $_ | Add-Member -NotePropertyName "cName" -NotePropertyValue $cName;
    $_ | Select *;
    } } | Sort cName | foreach {Rename-Item $_.FullName -NewName "$($_.BaseName.Padleft(10,'0'))$($_.Extension)"};

支持资源

相关内容