如何在 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
我想知道如何在 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