「画像ファイルを作成日時でリネーム」

 写真ファイルって撮影日時(作成日時)でリネームしとくと分かりやすい!
 ということで簡単なrubyスクリプトを作成。
 フォルダ・ファイルをドラッグ&ドロップで、フォルダ内のJPG・AVIファイルを全てリネームします。
 なお Windows7 だとあれこれやってもスクリプトにドラッグ&ドロップできなかったので、Exerbで実行ファイル(exe)にもしてみました。

 スクリプトPhotoRenamer.rb
 実行ファイル:PhotoRenamer.exe *1
 Exerb用レシピ:PhotoRenamer.exy + Win32API.so

PhotoRenamer.rb
#! ruby -Ks
#↑日本語モードにする

#●説明メッセージボックス用
require 'Win32API'
MessageBox = Win32API.new('user32', 'MessageBoxA', 'LPPI', 'I')

message = "JPG・AVIファイルを、作成日時でリネームします。\n"
message += "対象ファイル・フォルダをドラッグ&ドロップして下さい。\n"
message += "フォルダ内のJPG・AVIファイルをすべてリネームします。\n\n"
message += "例:" + Time.now.strftime("%Y-%m-%d_%H時%M分%S秒") + ".jpg"

#●リネームする関数 my_rename の定義(引数は fileName )

def my_rename(fileName)
  
  name = File.mtime(fileName).strftime("%Y-%m-%d_%H時%M分%S秒")
  ext  = fileName.sub(/^(.+)(\.[a-zA-Z0-9]+)$/, '\2')
  
  if ext.downcase != ".jpg" and ext.downcase != ".avi"
    print "対象外の拡張子のためスキップ\n"
  elsif FileTest.exist?(name+ext)
    print "同名ファイルが既にあるためスキップ\n"
  else
    File.rename(fileName, name+ext)
  end
end

#●ここからメイン

#ファイルorフォルダをドラッグ&ドロップされたら
if ARGV[0] != nil		
  #カレントフォルダを変更
  if File::ftype(ARGV[0]) == "directory"
    Dir::chdir(ARGV[0])
  else
    Dir::chdir(File::dirname(ARGV[0]))
  end
else
  MessageBox.call(0, message, "作成日付でリネーム", 0)
  exit
end

#カレントフォルダの中身を総ざらえ
Dir::foreach('.') {|f|
  if FileTest.file?(f)
    my_rename(f)
  end
}
PhotoRenamer.exy
general:
  startup: PhotoRenamer.rb
  core: gui
  kcode: sjis

file:
  PhotoRenamer.rb:
  Win32API.so:
    file: Win32API.so
レシピファイルを使った実行ファイルの生成

 Exerbをインストールした状態で以下のコマンドを実行するだけ。
 なお今回は同じフォルダに Win32API.so が必要ですが、これはメッセージボックス表示用のライブラリで、本来はなくてもいいファイルです。

exerb PhotoRenamer.exy

*1:アイコンは特に意味も無くPS「Moon」の王様です。 http://weblog.ta2nb.main.jp/?eid=228653 からお借りしました!