ファイル名に入っている数値をインクリメントするスクリプトをRubyで。
@CyberMameCANです。
ファイル名に入っている数値をインクリメントするスクリプトをRubyの練習を兼ねて作ってみました。
無駄な処理をしていたりするかもですが、
いい練習になりました。
[ruby]
# -*- encoding: utf-8 -*-
#!/opt/local/bin/ruby
#
# ファイル名に入っている数値をインクリメントし、
# exchangeというフォルダの中に、
# 処理中のファイルを新ファイル名でリネームする。
#
# 条件:ファイル名には拡張子の前に3桁の数値が入っている
# ex) XXXXX123.jpg
#
FILE_EXT = ‘jpg’ # 拡張子
NUM_KETA = 3 # 拡張子の前の数値の桁数
# フォルダ中のJPGファイルに対して処理を行う
Dir::glob( Dir::pwd + ‘/*.’ + FILE_EXT ).each { |f|
# 初期化
back = [] # ファイル名退避用
dir, file = File::split( “#{f}” ) # ディレクトリとファイル名を分ける
# 旧ファイル名退避
back << file.dup # 参照渡ししない
# ファイル名の後ろから処理するための準備
# ex) 5のマイナス 5 - 5×2 = -5
rnum_posi = File::extname( "#{f}" ).length - ( File::extname( "#{f}" ).length * 2 ) - NUM_KETA
i = file[ rnum_posi, NUM_KETA ].to_i + 1 # ファイル名の後ろ側から指定バイト取得
file[ rnum_posi, NUM_KETA ] = i.to_s.rjust( NUM_KETA, '0' ) # 戻す(桁が足りない時は0を補充)
# 新ファイル名退避
back << file.dup
puts back[1] + ' <- ' + back[0] + 'リネームしました。'
# ファイルリネーム
File.rename( back[0], "exchange/" + back[1] )
}
[/ruby]