如何在PowerShell中使用顺序偶数和奇数重命名文件?

时间:2015-11-16 12:11:45

标签: powershell powershell-v2.0 rename-item-cmdlet

我想知道如何在PowerShell中使用一系列偶数和赔率数字重命名特定文件夹中的文件。例如。 Folder1:pag_001.jpg, pag_003.jpg, pag_005.jpg.... pag_201.jpg,Folder2: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++)}

但它不起作用!欢迎任何建议

此致

2 个答案:

答案 0 :(得分:1)

您的$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}

答案 1 :(得分:1)

一堆方法。对于我的,我们将每个索引添加为成员,以便在重命名项脚本块中更容易访问它。

$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 

Add-Member中使用ForEach-Object我们更新索引的值,然后将其添加为同名的属性。然后在您的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