Rename-Itemで一括リネーム

翻訳が終わったファイルには言語名や作業者名、作業済のマークなどをつけて別名保存することが多いと思います。

しかしファイル数が10とか20とかあると、一つずつ手作業するのも面倒です。

さて、PowerShellに頑張ってもらいましょう。

Get-ChildItem -File | % {Rename-Item $_  ("Done_" + $_.Name)}

# パイプ記号について

パイプ記号 ”|” は、前の結果を次の処理に渡して連結するものです。

シェルを使う方にはおなじみですね。

ここでは Get-ChildItem で得られたファイルの一覧を、次のコマンドで使えるようにしています。

次のパーセント ”%”ForEach-Object のエイリアスです。

パイプによって渡されたファイルの一覧に対し、一つずつ処理を行うことを意味しています。

そして、その具体的な処理が {} の中に書かれているものです。

また、一つずつ取り出されたオブジェクトは、変数 $_ を使って取得することができます。

# Rename-Itemについて

さて、次に出てくるのが ”Rename-Item”

読んで字のごとし、項目名を変更するものです。

Linuxでは mv でリネームすることが多いと思いますし、実際PowerShellでもMove-Itemで同じことができるのですが、せっかく専用のコマンドレットがあるのでこちらを使いましょう。

使い方は

 Rename-Item <元のファイル名> <新しいファイル名>

です。

ここでは ”$_”、つまり一つずつ渡されたファイルに対し、”Done_”を付けたファイル名を使ってリネームしています。ファイル名の先頭に文字を足すのはこれでいいのですが、後ろにつける場合はどうでしょうか。

単純に、

Get-ChildItem -File | % {Rename-Item $_  ($_.Name + "_Done")}

とすると、どうなるでしょうか。 ……

なんと、拡張子の後ろに"_Done”が足されてしまいます。

それでは困りますよね。

なのでもう一工夫。

Get-ChildItem -File | % {Rename-Item $_  ($_.Name.Replace($_.Extension, ("_Done" + $_.Extension)))}

このように、Replaceメソッドを使って拡張子の前に追記するようにします。

PowerShellで取得される結果はオブジェクトになっているため、.Nameや.Extensionのようにプロパティを参照することで、ほしい部分だけを簡単に取得できます。

コマンドプロンプトよりずっと楽ですね。

# PR

ここで紹介するPowerShellの小技をまとめました!

ゴールデンブリッジでは、
翻訳・通訳・インバウンドツアー・国際会議運営など
ご用命をお待ちしております!
また、翻訳に関わるツール・ソフトウェアの開発等についてもお気軽にお声掛けください。

株式会社ゴールデンブリッジ 公式Webサイト