0

我想知道如何在 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。这就是为什么我想先更改名称并再次加入新名称。

我在类似的帖子中尝试过这个:

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

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++)}

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

问候,

4

2 回答 2

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}

于 2015-11-16T12:51:54.503 回答
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-Memberin aForEach-Object我们更新 index 的值,然后将其添加为同名的属性。然后在您的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
于 2015-11-16T13:10:22.470 回答