我一直试图找出一个基于ruby的文件重命名程序,作为我自己的编程练习(我知道在linux下重命名,但我想学习Ruby,并且Mac中没有重命名).
从下面的代码,问题是.include?即使我看到文件名包含这样的搜索模式,该方法总是返回false.如果我注释掉include?检查,gsub()似乎根本不会生成新的文件名(即文件名保持不变).所以有人可以看看我做错了什么吗?提前谢谢!
这是预期的行为:假设在当前文件夹中有三个文件:a1.jpg,a2.jpg和a3.jpg Ruby脚本应该能够将其重命名为b1.jpg,b2.jpg,b3.jpg
#!/Users/Antony/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
puts "Enter the file search query"
searchPattern = gets
puts "Enter the target to replace"
target = gets
puts "Enter the new target name"
newTarget = gets
Dir.glob("./*").sort.each do |entry|
origin = File.basename(entry, File.extname(entry))
if origin.include?(searchPattern)
newEntry = origin.gsub(target, newTarget)
File.rename( origin, newEntry )
puts "Rename from " + origin + " to " + newEntry
end
end
Run Code Online (Sandbox Code Playgroud)
bta*_*bta 11
略有修改版本:
puts "Enter the file search query"
searchPattern = gets.strip
puts "Enter the target to replace"
target = gets.strip
puts "Enter the new target name"
newTarget = gets.strip
Dir.glob(searchPattern).sort.each do |entry|
if File.basename(entry, File.extname(entry)).include?(target)
newEntry = entry.gsub(target, newTarget)
File.rename( entry, newEntry )
puts "Rename from " + entry + " to " + newEntry
end
end
Run Code Online (Sandbox Code Playgroud)
主要差异:
.strip删除尾随换行符,你从中获取gets.否则,这个换行符会搞砸你所有的匹配尝试.glob调用中使用用户提供的搜索模式而不是为所有内容进行通配,然后在以后手动过滤它.entry在调用中使用(即完整的文件名)gsub而rename不是origin. origin实际上只对.include?测试有用.由于它是文件名的片段,因此无法使用rename.我origin完全删除了变量,以避免滥用它的诱惑.对于示例文件夹结构,输入*.jpg,a和b三个输入提示(分别)应按照您的预期重命名文件.
| 归档时间: |
|
| 查看次数: |
8866 次 |
| 最近记录: |