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

标签:[tag]ruby[/tag]

留下回复