Powershellでファイル名を一括変更するコマンド
意外なところでエンジニアやってたことが役に多々ので背景込みでメモ。
背景
嫁の実家に帰った際に、義母から以下のヘルプをもらった。
カーオーディオで音楽が聴けない!
調べたら以下の2点がわかった。
上記より以下の目標
.3gpファイルを.mp3に変換する
調査結果
やりたいこと
.3gpを.m4aに一括リネーム
なぜpowershell?
- 嫁の実家のPC上での操作のため、出来るだけデフォルトのアプリでなんとかしたい。(cygwin入れるのめんどくさい)
- コマンドプロンプトよりはPowershellの方が扱いやすそう
コマンド
Get-ChildItem -include *.3gp -r | Rename-Item -NewName { $_.Name -replace '\.3gpp$','.m4a'}
- Get-ChildItem: ファイル一覧を表示
- -include <対象ファイル名>:対象ファイルのみを表示
- -r: サブフォルダ内も検索
以下参考サイトから説明を抜粋
対象となるファイル名の一覧が得られたら「Rename-Item -NewName <新ファイル名>」というコマンドを繰り返し実行させる(変更対象のファイル名はパイプ経由で渡される)。この例では<新ファイル名>として「{ $.Name -replace '旧文字列','新文字列' }」という「(PowerShellの)スクリプトブロック」を渡している。このブロック中では、パイプ経由で渡されたファイル名($.Name)に対して、-replaceでファイル名中の文字列の一部を置換している。コマンドプロンプトのrenコマンドと違って、PowerShellのRename-Itemコマンドレットでは新ファイル名中にワイルドカードを含めることはできず、このように必ず完全なファイル名を-NewNameで渡す必要がある