我想知道如何在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++)}
但它不起作用!欢迎任何建议
此致
答案 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