aboutnagaishiの日記

テレコム屋さん出身で、現在はweb企業の社内インフラやっています。インフラ周りを中心に業務の備忘録として使用します。

Powershellでファイル名を一括変更するコマンド

意外なところでエンジニアやってたことが役に多々ので背景込みでメモ。

背景

嫁の実家に帰った際に、義母から以下のヘルプをもらった。

カーオーディオで音楽が聴けない!

調べたら以下の2点がわかった。

  • ソニーの音楽アプリでCDを取り込んでおり、エンコードが.3gpでやってた(なんでや!)
  • カーオーディオは.3gp非対応

上記より以下の目標

.3gpファイルを.mp3に変換する

調査結果

  • .3gpから直接.mp3に変更する方法がみつからない。

  • .m4aから.mp3に変更するのはitunesでできる。

  • .3pgを.m4aに変更するのは拡張子を変更するだけでできる。

やりたいこと

.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で渡す必要がある

参考

Windows TIPS:Windows PowerShellを使って複雑なパターンのファイル名変更を行う - @IT