初学者,自学Ruby。我得到了Errno :: ENOENT,我想我知道怎么做,但我不明白为什么我会得到它。这是错误:
Downloading 4 files: . . . c11-photos.rb:29:in `rename': No such file or
directory - (c:/users/7/dropbox/3-coding/ruby/study/blizz-01.jpg, blitz-03.jpg)
(Errno::ENOENT)
from c11-photos.rb:29:in `block in <main>'
from c11-photos.rb:20:in `each'
from c11-photos.rb:20:in `<main>'
首先,该计划有效。准确移动和重命名所有文件。但是这个错误在它运行完毕后弹出。对于这个特定的工作,只有2张图片被移动到一个新目录,但请注意该程序说它下载了4个文件。似乎正在发生的事情是我的#each
方法在执行时以某种方式重复。即使目标目录没有更多要移动的图片文件,它也会尝试继续移动文件。我猜这是因为&#34; blizz-01.jpg&#34; file是要移动的文件之一,但是&#34; blitz-03.jpg&#34;不是任何文件的名称(如果要移动第三张图片,这是可能的名称)。因为&#34; blizz-01.jpg&#34;已经被移动了,这会让它给我一个&#34;没有这样的文件......&#34;错误。当然,我不知道这是不是发生了什么,但这似乎是错误所说的。
为什么我收到此错误和/或我的代码出现了什么问题?它会产生此问题?
这是我的代码:
require "yaml"
puts "Where to move the pictures?"
destination = gets.chomp
Dir.chdir "#{destination}"
puts "What shall we name this batch?"
batch = gets.chomp
puts "Where to get your new pictures?"
findpics = gets.chomp
pictures = Dir["#{findpics}/*.{jpg,JPG,JPEG,jpeg,png,PNG}"]
print "Downloading #{pictures.length} files: "
amount = 1
pictures.each do |pic|
print ' . '
newname = if amount < 10
"#{batch}-0#{amount}.jpg"
else
"#{batch}-#{amount}.jpg"
end
File.rename pic, newname
amount += 1
end
puts
puts "Operation complete!"
谢谢你的帮助!
答案 0 :(得分:3)
不区分大小写的文件系统?
blizz-01.jpg
匹配两次,一次由"#{findpics}/*.jpg"
匹配,一次由"#{findpics}/*.JPG"
匹配,这两个是Dir[]
的文件系统glob参数的两个扩展。其他文件的注释相同。显然,第二次在each
循环中处理它时,它已经被重命名。
如果您希望这在区分大小写和不区分大小写的文件系统上都有效,并且允许“.jpg”和“.JPG”等等,那么您可以快速而简单地使用匹配项:
pictures = Dir["#{findpics}/*.{jpg,JPG,JPEG,jpeg,png,PNG}"].uniq