2

の出力を使用してファイルのグループの名前を変更しようとしていGet-Childitem | Where-Objectますが、変数のグループで名前を変更したい定数名で名前を変更する代わりに、演算子-replaceを使用して文字列のどこにあるのかを見つけています変更したい。例:

nane_01 -> name_23
name_02 -> name_24  they are not with the same final digit

これは私がテストに使用しているコードです:

$a = 0
$b = 1
$Na= 2
$Nb= 3
Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname { $_.name  -replace "_{0}{1}","_{2}{3}" -f $a++,$b++,$Na++,$Nb++ } -Whatif

-replace増分変数を演算子で機能させる方法が見つかりません

4

1 に答える 1

2
  1. 変数のスコープを明示的に指定します。そうしないと、名前変更スクリプト ブロックが呼び出されるたびにローカル コピーが破棄されます。

  2. 演算子の検索/置換文字列-replaceは個別のパラメーターであるため、それぞれを括弧で囲んで個別に書式設定します (そうしないと、PowerShell は に適用しようとします-f) $_.name

$script:a = 0
$script:b = 1
$script:Na= 2
$script:Nb= 3

Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname {
    $_.name -replace ("_{0}{1}" -f $script:a++,$script:b++),
                     ("_{0}{1}" -f $script:Na++,$script:Nb++)
} -Whatif

または、変数を 1 つだけ使用します。

$script:n = 0

Get-Childitem | Where-Object {$_.name -match "_0[1-9]"} | rename-item -Newname {
    $_.name -replace ("_{0}{1}" -f $script:n++,$script:n++),
                     ("_{0}{1}" -f $script:n++,$script:n++)
} -Whatif
于 2016-09-04T23:38:18.610 に答える