重命名目录中的所有文件?

时间:2014-04-04 10:41:54

标签: ruby file rename

我的任务:

  

编写程序以使用正则表达式重命名文件。这个   程序将采用三个命令行参数:其中的目录   重命名文件,一个匹配文件的正则表达式   重命名,以及用于替换正则表达式匹配的字符串。该   主要用途是更改文件扩展名,但它应该能够   处理替换文件名的任何部分。它应该运行为   如下:

./fixname.rb dir 'pattern' replacement

我写的程序是:

puts "Renaming files..."


folder_path = ARGV[0]
reg_exp = ARGV[1].to_regexp

Dir.glob(folder_path + "/*").sort.each do |f|
    filename = File.basename(f, File.extname(f))
  myString = String.new 
  myString = filename 
  filename = myString.gsub(reg_exp, ARGV[2])
  #puts myString
    File.rename(f, folder_path + "/" + filename + File.extname(f))
end

puts "Renaming complete."

当我使用正则表达式时,重命名不会发生,否则它正在运行。我得到了:

error "`gsub': no implicit conversion of nil into String (TypeError)"

1 个答案:

答案 0 :(得分:1)

你认为正则表达式不是,它是一个包含正则表达式模式的字符串。

您需要将其转换为Regexp对象。如何做到这一点留给你。