Ruby 写的批量重命名脚本
作者:半瓶墨水 链接:http://www.2maomao.com/blog/extended-renamer-in-ruby/
有时候想批量修改文件名的时候,发现系统的重命名和ren命令都不好用,自己拿ruby写了一个:
用法: exren [-x] pattern replace
例子: (拜ruby的傻设计所赐,*和?两边得加上单引号’ )
exren foo’*’.txt bar’*’.doc :重命名所有 以foo开头的txt文件 为 bar开头的doc文件
exren foo’?’.mp3 bar’?’.mp3 :略(?代表1个或者0个任意字符)
exren -x (test\d+)\.mp3 \\1.mp3 :正则表达式匹配,不理解的就算了
下载: exren.rb
#Extended renamer by yuchifang(realfun at gmail dot com)
def group_pattern(str)
str = str.dup
str.gsub!(/\./, '\\.')
str.gsub!(/\\/, "\\\\")
str.gsub!(/\*/, '(.*)')
str.gsub!(/\?/, '(.?)')
str
end
def group_replace(str)
str = str.dup
count = 1
while str =~ /[*?]/
str.sub!(/[*?]/, "\\\\#{count}")
count += 1
end
str
end
def main
pattern = nil
replace = nil
if ARGV.size == 3 && ARGV[0] == '-x'
pattern = ARGV[1]
replace = ARGV[2]
elsif ARGV.size == 2
pattern = group_pattern(ARGV[0])
replace = group_replace(ARGV[1])
else
# show_help
exit
end
dir = Dir.pwd
count = 0
Dir.foreach(dir) do |file|
if file =~ /^#{pattern}$/
count += 1
new_file = file.sub(/^#{pattern}$/, replace)
puts " #{file} \t -> \t #{new_file}"
system("ren \"#{file}\" \"#{new_file}\"")
end
end
puts
puts "Renamed #{count} files."
puts
end
main
def group_pattern(str)
str = str.dup
str.gsub!(/\./, '\\.')
str.gsub!(/\\/, "\\\\")
str.gsub!(/\*/, '(.*)')
str.gsub!(/\?/, '(.?)')
str
end
def group_replace(str)
str = str.dup
count = 1
while str =~ /[*?]/
str.sub!(/[*?]/, "\\\\#{count}")
count += 1
end
str
end
def main
pattern = nil
replace = nil
if ARGV.size == 3 && ARGV[0] == '-x'
pattern = ARGV[1]
replace = ARGV[2]
elsif ARGV.size == 2
pattern = group_pattern(ARGV[0])
replace = group_replace(ARGV[1])
else
# show_help
exit
end
dir = Dir.pwd
count = 0
Dir.foreach(dir) do |file|
if file =~ /^#{pattern}$/
count += 1
new_file = file.sub(/^#{pattern}$/, replace)
puts " #{file} \t -> \t #{new_file}"
system("ren \"#{file}\" \"#{new_file}\"")
end
end
puts
puts "Renamed #{count} files."
puts
end
main
标签:[tag]ruby[/tag]


