Powershellでディレクトリ・ファイル名の文字列の一部を特定の規則で置換し一括変更します。
システムで参照するため現在の命名規則に基づいたディレクトリ・ファイル名を別の規則に基づいて修正する必要がありました。
1件ずつ手でやるのは速度・精度の両面から好ましくないためPowershellで一括変更をかけることにしました。
ディレクトリ・ファイルを抽出しその名前を置換する
結論から話すとコマンドは下記のようにしました。
Get-ChildItem -Directory -Path C:\test | Rename-Item -NewName { $_.Name -replace '*', '' }
まずはGet-ChildItemで名前の置換をかけるディレクトリ・ファイルを抽出します。
抽出したディレクトリ・ファイルに対してRename-Itemを実行し名前を変更します。
順番に説明します。
Get-Childitemでディレクトリ・ファイルを取得する
ディレクトリ名を変更したいと仮定してまずディレクトリを取得します。
Get-ChildItem -Directory -Path C:\test
Get-ChlidItemは指定したディレクトリ内のディレクトリ・ファイルを取得するコマンドです。
-Directoryは取得対象をディレクトリにします。
もし取得対象をファイルにしたい場合は-Fileを指定します。
-Pathは取得先を後ろに記載して指定します。
この1行で取得完了です。
Rename-Itemで名前を変更する
Rename-Itemで前述のGet-ChildItemで取得したディレクトリの名前の値を変更します。
Rename-Item -NewName { $_.Name -replace '*', '' }
Rename-Itemはディレクトリ・ファイルの名前を変更するためのコマンドです。
−NewNameオプションは新しい名前を指定します。
{}の中の値を新しい名前として指定しています。
{}の中では-Replaceで正規表現を利用した文字列の置換を行っています。
$_はパイプライン処理による現在のオブジェクトを指します。
ここではGet-ChlidItemで取得した値が該当します。
それに.Nameを付けて名前のみを取得しています。
その名前の文字列から-Replaceの後の第一引数にマッチするものを第二引数の文字列に変換します。
ここでは*を削除しています。
こちらで以上です。
