PowerShell で名前変更スクリプトを作成するのにかなり苦労しています。状況: ディレクトリに、「4 桁 - テキスト - ジャンク」という形式で名前を付けたフォルダがあります。名前を「テキスト (4 桁)」に変更したい
今、いくつかのサンプル名を使って遊ぶためのディレクトリを作成しました:
1996 - 何か面白い - 何かくだらない
2006 - これをコピー - 無視
最初に名前をエコーするスクリプトを設定しようとしましたが、正規表現のコツがわかりません。次のコードは、「1996 - something」と「2006 - copy」を出力するだけです。
Get-ChildItem | Foreach-Object { if ($_.BaseName -match "(\d{4} - \w+ -*)") { echo $matches[0]}}
これは「1996 - 何か面白い - 何かくだらない \n ()」と「2006 - これをコピー - 無視\n ()」と出力します。
Get-ChildItem | Foreach-Object { echo ($_.BaseName -replace "(\d{4} - \w+ - *)"), "$2 ($1)"}
どちらのアプローチもリテラル文字列「 - 」をマッチングの境界として尊重しない理由を誰かに教えてもらえますか?
*編集* zespriに感謝します。私の問題を解決したコードは
Get-ChildItem | Foreach-Object {
if ($_.BaseName -match "(\d{4} - [^-]*)") {
Rename-Item $_ ($_.BaseName -replace "(\d{4}) - (.+)(?= -).*" ,'$2 ($1)')
}
}