如何在 PowerShell 中重命名具有连续偶数和奇数的文件?

How to rename files with sequential even and odd numbers in PowerShell?

我想知道如何在 PowerShell 中使用仅包含偶数和奇数的序列重命名特定文件夹中的文件。例如。文件夹 1:pag_001.jpg, pag_003.jpg, pag_005.jpg.... pag_201.jpg,文件夹 2:pag_002.jpg, pag_004.jpg, pag_006.jpg.... pag_200.jpg。这是因为我有一份文档,先扫描了奇数页,其次是偶数页,因此它们的文件名是从1到201的连续序列。然后我将一半的文件是奇数页分开了一个新的地方:Folder1,下半部分,Folder2中的偶数页。这就是为什么我想先更改名称,然后用新名称再次加入。

我在 similar post 中试过这个:

目前我可以生成这样的偶数序列:

ForEach ($number in 1..100 ) { $number * 2}

和这样的奇数:

ForEach ($number in 0..100 ) { $number *2+1}

并希望应用之前生成的序列来重命名我的文件:

cd C:\test\Folder1
$i = $number * 2
Get-ChildItem *.jpg | %{Rename-Item $_ -NewName ('pag_{0:D3}.jpg' -f $i++)}

但是没用!欢迎任何建议

此致,

你的$i++每次都加1,这就是为什么它也加偶数,

您可以创建奇数数组,然后使用 $i++ 步进数组中的一项,如下所示:

$path = "C:\test\Folder1"
$oddNumbersArray = 0..100 | % {$_ *2 +1}
$i = 0
Get-ChildItem $path -Filter *.jpg | % {Rename-Item $_ -NewName ("pag_$($oddNumbersArray[$i]).jpg") ;$i++}

对于偶数,将 $oddNumbersArray 行更改为 {$_ *2}

有很多方法可以做到这一点。对于我的,我们将每个索引添加为一个成员,以便在重命名项目脚本块中更容易访问它。

$index = 0 

Get-ChildItem $path -Filter "*.jpg" | ForEach-Object{
    $index = $index +2
    $_ | Add-Member -Name "Index" -MemberType NoteProperty -Value $index -PassThru
} | Rename-Item -NewName {'pag_{0:D3}.jpg' -f $_.Index} -WhatIf 

ForEach-Object 中使用 Add-Member 我们更新索引的值,然后将其添加为同名的 属性。然后在您的 rename-item 脚本块中我们可以调用它 属性。确认新名称是您想要的后,删除 -WhatIf。在 0 和 -1 之间切换 $index,分别表示偶数和奇数。


另一种方法使用全局索引变量并通过使用计算属性创建 Rename-Item 使用的管道变量来缓解管道。

$path = "C:\Temp\csv"
$global:index = 0 # Use -1 for odd

Get-ChildItem $path -Filter "*.csv" | 
    Select-Object @{Name="Path";Expression={$_.FullName}},
        @{Name="NewName";Expression={$global:index = $global:index + 2; 'pag_{0:D3}.jpg' -f $global:index}} | 
    Rename-Item  -WhatIf