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++して配列内の 1 つの項目をステップ実行できます。

$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-MemberしてForEach-Objectindex の値を更新し、それを同じ名前のプロパティとして追加します。次に、rename-itemスクリプトブロックでそのプロパティを呼び出すことができます。-WhatIf新しい名前が目的のものであることを確認したら、 を削除します。$index偶数と奇数をそれぞれ 0 と -1 の間で切り替えます。


グローバル インデックス変数を使用し、計算されたプロパティを使用して使用するパイプライン変数を作成することでパイプラインを軽減する別の方法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 に答える