「+1.txt」というファイル名を「+2.txt」に変更したい
私の Powershell スクリプトは次のとおりです:
$old = "\+1"
$new = "\+2"
Get-ChildItem | Rename-Item -NewName {$_.name -replace $old, $new }
結果は次のようになります:
powershell : Rename-Item : Cannot rename the specified target, because it represents a path
これを修正するにはどうすればいいでしょうか?
答え1
PowerShell の正しいエスケープ文字は ` (バックティック) です。
たとえば、改行を含む文字列を取得するには、次のように記述します。
$newline = "`n"
さらに、少なくともテストでは、エスケープする必要はありませんでした。そのため、そのまま機能しました。Rename-Item "+1.txt" "+2.txt"
を使用してみると、-replace
最初の引数にはバックスラッシュが必要でしたが、2 番目の引数には必要ありませんでした。その$new = "+2"
ため、機能するはずです。その理由は、の最初の引数が-replace
正規表現である可能性があるためです。そのため、項には特別に処理されないリテラル + が必要です。2 番目の項はリテラル文字列として処理されるため、特別なエスケープなどは必要ありません。
答え2
-replace
正規表現を使用しますが、手動で文字をエスケープする必要はありません。Get
-ChildItemは現在のパス内のすべての項目を反復処理するため、名前を指定する必要があります。
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem $old -file|
Rename-Item -NewName {$_.FullName -replace [regex]::escape($old), $new }
または where to -match
only パターンを使用します。
$old = "+1.txt"
$new = "+2.txt"
Get-ChildItem |
where Name -match [regex]::escape($old)|
Rename-Item -NewName $new