[PR]

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コマンドラインで連番ファイル名の変更 (3) - PowerShell

一応「コマンドラインで連番ファイル名の変更 (2)」の続きです。

今回は PowerShell を使うんですけどこれがすばらしくて、コマンドプロンプトで for コマンドとかワイルドカードとかを駆使して試行錯誤するのももはや今日までです。もう連番の桁数とか文字数とかに左右されることもありません。

で、方法ですけど、例えば sample1.txt sample2.txt ... sample99.txt sample100.txt を supersample1.ultratxt ... にリネームしたい場合はこんな感じです。

Get-ChildItem sample* | Rename-Item -NewName { ($_.Name -replace "sample", "supersample") -replace "txt", "ultratxt" }

なんか複雑に見えますけどね、そんなことないんですよ。長いのが悪いんです。説明する前に短くしましょう。

まず Get-ChildItemRename-Item というのはコマンドプロンプトでいえば dirren です。そしてそれぞれ実際に dir と ren がエイリアスとして使えます。

当たり前ですけど "sample*" は同じディレクトリにリネームしない他のファイルが無ければ省けます。あと "-NewName" も明示する必要は無いです。

なので次のような感じに短くできます。

dir | ren { ($_.name -replace "sample", "supersample") -replace "txt", "ultratxt" }

それでこれは何をやっているのかというと、まず dir でファイルを取得して、その結果をパイプ(dir と ren の間の棒のこと)で一つずつ ren に送ってます。

次にリネームの部分です。 "$_.Name" というのはパイプで送られてきたファイル名を表します。細かいこと言うと "$_" が送られてきたオブジェクトを表していて ".Name" でファイル名を指定してるんですけどまあどうでもいいでしょう。

あとは大体見たままだと思いますけど、 "-replace" でファイル名の一部を置換してるだけです。例えば sample1.txt なら、まず括弧内で "sample" が "supersample" に置換されて supersample1.txt になって、括弧の外でまた "txt" が "ultratxt" に置換されて supersample1.ultratxt になるわけです。

いやあ PowerShell は最高です。コマンドプロンプトが窓から投げ捨てられる日もそう遠くない気がしてきました。

Post a comment

Sponsored Link
Information
Menu
アンケート
Links
Mail Form

名前:
メール:
件名:
本文:

Sponsored Links
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。