手頃なリネームソフトが無かったのでPythonで自作しました。

 

 

オリジナルファイル名の先頭にyyMMddを付けたかっただけなので、

インストールしていたPython2.7と、Exifライブラリを使用しました。

http://sourceforge.net/projects/exif-py/

 

Windows7なので「C:\Users\ユーザー名\AppData\Roaming\Microsoft\Windows\SendTo」に「EXIF_Rename.py」を作成。

コマンドライン引数を受け取るようにスクリプトを書きます。

 

(2011/10/15追記:SVNにあげておきました。http://svn.htlab.net/Exif_Rename/

 

#! C:/Python27/python.exe
# -*- coding: utf-8 -*-
import sys, os, EXIF
argvs = len(sys.argv)

print "### EXIF Rename Script ###"
print str(argvs-1)+" Files Rename Start"

for i in range(1, argvs):                       #引数の数だけループ
    fpath = sys.argv[i]                         #フルパス
    fname = fpath.split('\\')[-1]               #ファイル/ディレクトリ名
    fdir  = fpath[0:fpath.rindex("\\")]         #ファイルディレクトリ

    if os.path.isfile(fpath):                   #ファイルの場合
        print(" -> ("+str(i)+"/"+str(argvs-1)+") FileName: "+fname),
        if fname[-3:].lower() == "jpg" or fname[-3:].lower() == "cr2":
            print(" jpg/cr2 file Match"),
            exif = str(EXIF.process_file(open(fpath, 'rb'))['EXIF DateTimeOriginal'])
            year = exif.split()[0].split(":")[0]
            mon  = exif.split()[0].split(":")[1]
            day  = exif.split()[0].split(":")[2]
            #hour = exif.split()[1].split(":")[0]
            #min  = exif.split()[1].split(":")[1]
            #sec  = exif.split()[1].split(":")[2]
            if fname[0:6] == year[2:]+mon+day:
                os.rename(fpath, fdir+"\\"+fname[7:])
                print(" ... Fixed")
            else:
                os.rename(fpath, fdir+"\\"+year[2:]+mon+day+"_"+fname)
                print(" ... Renamed")
        else:
            print(" not jpg/cr2 file")

    elif os.path.isdir(fpath):                  #フォルダの場合
        count = 0
        all = 0
        for root, dirs, files in os.walk(fpath):
            for file_ in files:
                all += 1
        for root, dirs, files in os.walk(fpath):
            for file_ in files:
                full_path = os.path.join(root, file_)           #フルパス
                fname = full_path.split('\\')[-1]               #ファイル/ディレクトリ名
                fdir  = full_path[0:full_path.rindex("\\")]     #ファイルディレクトリ
                count +=1

                print(" -> ("+str(count)+"/"+str(all)+") FileName: "+fname),
                if fname[-3:].lower() == "jpg" or fname[-3:].lower() == "cr2":
                    print(" jpg/cr2 file Match"),
                    exif = str(EXIF.process_file(open(full_path, 'rb'))['EXIF DateTimeOriginal'])
                    year = exif.split()[0].split(":")[0]
                    mon  = exif.split()[0].split(":")[1]
                    day  = exif.split()[0].split(":")[2]
                    #hour = exif.split()[1].split(":")[0]
                    #min  = exif.split()[1].split(":")[1]
                    #sec  = exif.split()[1].split(":")[2]
                    if fname[0:6] == year[2:]+mon+day:
                        os.rename(full_path, fdir+"\\"+fname[7:])
                        print(" ... Fixed")
                    else:
                        os.rename(full_path, fdir+"\\"+year[2:]+mon+day+"_"+fname)
                        print(" ... Renamed")
                else:
                    print(" not jpg/cr2 file")

print "### E N D ###"

 

フォルダの対応などは後から付けた感が漂っていますが気にせず。

とりあえず動きますが、暇な人はもうちょっとスマートにしてみるといいかもです。

 

ファイルを選択した状態で右クリック、送るメニューから「EXIF_Rename.py」を選択するとコマンドラインが開き処理開始です。

処理が終わると自動的に閉じます。

 

 

追記

ファイル名が重複しているときに、エクスプローラーがつけるファイル名、

「オリジナルファイル名+半角スペース+”(2)”」を削除するスクリプト。

 

#! C:/Python27/python.exe
# -*- coding: utf-8 -*-
import sys, os
argvs = len(sys.argv)

print "### (2) Delete Script ###"
print str(argvs-1)+" Files Rename Start"

for i in range(1, argvs):                       #引数の数だけループ
    fpath = sys.argv[i]                         #フルパス
    fname = fpath.split('\\')[-1]               #ファイル/ディレクトリ名
    fdir  = fpath[0:fpath.rindex("\\")]         #ファイルディレクトリ

    if os.path.isfile(fpath):                   #ファイルの場合
        print(" -> ("+str(i)+"/"+str(argvs-1)+") FileName: "+fname),
        if fname[-7:-4].lower() == "(2)":
            print(" (2) file Match"),
            os.rename(fpath, fdir+"\\"+fname[0:-8]+fname[-4:])
            print(" ... Fixed")
        else:
            print(" not (2) file")

    elif os.path.isdir(fpath):                  #フォルダの場合
        count = 0
        all = 0
        for root, dirs, files in os.walk(fpath):
            for file_ in files:
                all += 1
        for root, dirs, files in os.walk(fpath):
            for file_ in files:
                full_path = os.path.join(root, file_)           #フルパス
                fname = full_path.split('\\')[-1]               #ファイル/ディレクトリ名
                fdir  = full_path[0:full_path.rindex("\\")]     #ファイルディレクトリ
                count +=1

                print(" -> ("+str(count)+"/"+str(all)+") FileName: "+fname),
                if fname[-7:-4].lower() == "(2)":
                    print(" (2) file Match"),
                    os.rename(full_path, fdir+"\\"+fname[0:-8]+fname[-4:])
                    print(" ... Fixed")
                else:
                    print(" not (2) file")

print "### E N D ###"