LoginSignup
1
1

More than 5 years have passed since last update.

【PowerShell】カレントフォルダのファイルの拡張子を小文字に変換

Last updated at Posted at 2016-05-31

カレントフォルダのファイルの拡張子を小文字に変換するコード。

素直な記述
Get-ChildItem -File |
  % { Rename-Item $_.Name ([regex]"\.\w+`$").Replace($_.Name, { $args[0].Value.ToLower() }) }
簡略化を試みた記述
ls -File | ren -n { ([regex]"\.\w+$").Replace($_, { $args[0].Value.ToLower() }) }
  • renRename-Itemコマンドレットの別名、-n-NewNameパラメータの簡略表現。
  • 素直な記述だと$_.Nameが二箇所に記述されてしまう。冗長な記述を避けるためにスクリプトブロックパラメータを使用。
  • スクリプトブロックの戻り値がリネーム後のファイル名になる。
  • キャプチャした文字列は$args[0].Groups[n].Valueで取得する。今回は未使用。
  • ls -fと書きたかったけど、パラメータ名fは曖昧だという指摘を受ける。やむをえずフルネームで記述。
  • 簡略化を試みた記述で一番不安なのが、Regex.Replaceメソッドの第一引数にFileInfoオブジェクトを渡しているところ。FileInfoオブジェクトをString型に変換するとファイル名になるけど、はたして別の環境でも同じように変換してくれるか。

[2016/06/01追記]

  • パラメータにもエイリアスが存在している。PowerShellでhelp ls -fullを実行することにより、lsコマンドのパラメータのエイリアスを知ることができる。-Fileパラメータのエイリアスは-afなので、簡略化を試みた記述は更に短くできる。
ls -af | ren -n { ([regex]"\.\w+$").Replace($_, { $args[0].Value.ToLower() }) }
1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1