Problems moving and renaming pictures with this code, what wrong?

Hi,

I have been reading the book called “Learning to Program” and I have to
say it, for beginners this is a great book, anyways, while practicing
the exercises found in the book I came across this code that for some
reason it doesn’t work.

I have some .jpg pictures located in a folder called “temp-photos” in my
desktop and I want to rename them and then move them to a folder which
is also located in my desktop but in a folder called “my-photos” and I’m
trying the code below but when I run it, it just doesn’t do anything, no
errors but the pictures don’t get moved or renamed.

Any idea what am I doing wrong? I don’t actually need this program but
since I’m practicing I want to understand what’s going on.

Thanks


Dir.chdir ‘/Users/userName/Desktop/my-photos’

pic_names = Dir[’/Users/userName/Desktop/temp-photos.{JPG,jpg}’]

puts ‘What would you like to call this batch?’
batch_name = gets.chomp

puts
print "Downloading #{pic_names.length} files: "
pic_number = 1
pic_names.each do |name|
print ‘.’
new_name = if pic_number < 10

“#{batch_name}0#{pic_number}.jpg”

else
“#{batch_name}#{pic_number}.jpg”

end

File.rename name, new_name

pic_number = pic_number + 1
end
puts
puts ‘Done’

I have some .jpg pictures located in a folder called temp-photos in my
desktop and I want to rename them and then move them to a folder which
is also located in my desktop but in a folder called my-photos and Im
trying the code below but when I run it, it just doesnt do anything, no
errors but the pictures dont get moved or renamed.
[…]
pic_names = Dir[’/Users/userName/Desktop/temp-photos.{JPG,jpg}’]

Since temp-photos is a directory, should not the glob pattern be:

pic_names = Dir[’/Users/userName/Desktop/temp-photos/*.{JPG,jpg}’]

I know, shame on me I should know that :frowning:

Thanks a lot for your help!

Fily S. wrote in post #988915:

I want to rename them and then move them

You can do this in one step.

pic_number = 1
pic_names.each do |name|
[…]
pic_number = pic_number + 1
end

You can instead do:

pic_names.each_with_index do |name, pic_number|
[…]
end

(but pic_number would start at 0.)

new_name = if pic_number < 10

“#{batch_name}0#{pic_number}.jpg”

else
“#{batch_name}#{pic_number}.jpg”

end

You can also do:

new_name = “%s%0d2.jpg” % [batch_name, pic_number+1]

(I added 1 to pic_number because now it starts at zero.)

Thank you for the simplified version.