1. ホーム
  2. スクリプト・コラム
  3. パワーシェル

PowerShellによるファイル名変更のバッチ処理例

2022-02-04 22:39:27

最後に、CMDと比較してPowerShellの便利なところを発見しました。

アメリカの番組をいくつかダウンロードしたのですが(すみません、見終わったら削除します)、たいてい長いファイル名で、必要ない情報がたくさん含まれています、例えば

コピーコード コードは以下の通りです。

Don't Lie to Me.Lie.To.Me.S04E11.Chi_Eng.HDTVrip.720×396-YYeTs人人影视V2.rmvb
Don't Lie to Me.S04E12.Chi_Eng.HDTVrip.720×396-YYeTs人人影视.rmvb
Don't Lie to Me.S04E13.Chi_Eng.HDTVrip.720×396-YYeTs人人影视V2.rmvb
Don't Lie to Me.S04E14.Chi_Eng.HDTVrip.720×396-YYeTs人人影视.rmvb

私が欲しいのは
コピーコード コードは以下の通りです。

Lie.To.Me.S04E11.rmvb
Lie.To.Me.S04E12.rmvb
Lie.To.Me.S04E13.rmvb
Lie.To.Me.S04E14.rmvb

元のファイル名の一部を固定する必要があったので、PowerShellを思いつき、まずはbyでテストしてみました。
コピーコード コードは以下の通りです。

foreach ($i in (dir else*){ Write-Host $i.Name.SubString(6, 17); }

このフォルダーには "don't"で始まる他のファイルはないので、(dir don't*) を使って名前を変更する必要があるすべてのファイルをリストアップすることができます。次に、それぞれのファイルについて、ファイル名の6文字目から23文字目までを取り出します: $i.Name.SubString(6, 17)

このように表示されます。

コピーコード コードは以下の通りです。

Lie.To.Me.S04E11.
Lie.To.Me.S04E12.
Lie.To.Me.S04E13.
Lie.To.Me.S04E14.

そして、最後の拡張子rmvbを追加するだけで、最終的なコマンドは次のようになります。

コピーコード コードは以下の通りです。

foreach ($i in (dir else*){ $i.MoveTo($i.Name.SubString(6, 17) + "rmvb"); }

ヒント:PowerShellのカレントパスはCDコマンドに従わない。MoveToを使用する前に、[Environment]::CurrentDirectory = $pwdで現在のパスを調整する必要があります。