重命名目录中的所有文件?
Posted
技术标签:
【中文标题】重命名目录中的所有文件?【英文标题】:Rename all files in directory? 【发布时间】:2014-05-16 15:11:41 【问题描述】:我的任务:
编写一个程序来使用正则表达式重命名文件。这 程序将采用三个命令行参数: 重命名文件,匹配文件的正则表达式 重命名,并用一个字符串替换正则表达式匹配。这 主要用途是更改文件扩展名,但它应该能够 处理替换文件名的任何部分。它应该运行为 如下:
./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)"
【问题讨论】:
我不会做你的作业。 你应该可以在这里找到你需要的一切:link 如果您诚实地自己开始工作,但不知何故被卡住了,那么请提出一个新问题:发布您到目前为止的代码并解释您不理解的内容,这很可能你会在这里得到帮助。因此,您仍然可以在作业方面获得帮助,只是没有一次性为您完成所有作业。 如何写文件名[reg_exp] = ARGV[2]. @user3497652:感谢您的编辑。你能解释一下出了什么问题吗?它看起来像脚本类型的作品,但当您使用正则表达式语法时,重命名可能不会发生(您正在执行完全匹配替换)。对吗? 【参考方案1】:你认为的不是正则表达式,它是一个包含正则表达式模式的字符串。
您需要将其转换为 Regexp 对象。如何做到这一点由您决定。
【讨论】:
我做了这样的改变。 reg_exp = ARGV[1].to_regexp。可以吗? 你告诉我们。有没有“String.to_regexp”方法? 那么也许您愿意承担这项任务? OP 提出了一个非常容易回答的问题,只需几分钟即可通过简单的搜索找到答案。有时最好的答案是让他们走上正确的道路,让他们继续前进。答案并不总是给他们代码,好的答案会教他们如何找出问题,以便他们可以将学到的知识应用于其他类似的情况。这就是我所做的。此外,OP 正在做家庭作业类型的作业。由他们来回答问题,他们应该在没有他人帮助的情况下回答。以上是关于重命名目录中的所有文件?的主要内容,如果未能解决你的问题,请参考以下文章