Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby重命名目录中的文件会删除文件_Ruby - Fatal编程技术网

Ruby重命名目录中的文件会删除文件

Ruby重命名目录中的文件会删除文件,ruby,Ruby,我有以下代码,可以对当前目录中的图像进行重命名: puts Dir["**/*"].length folder_path = Dir.pwd filenames = Dir.glob("*.png") filenames.each_with_index do |filename, index| File.rename(filename, folder_path + "/#{index}" + File.extname(filename)) end 我的控制台: 98 $ ruby r

我有以下代码,可以对当前目录中的图像进行重命名:

puts Dir["**/*"].length

folder_path = Dir.pwd

filenames = Dir.glob("*.png")

filenames.each_with_index do |filename, index|
  File.rename(filename, folder_path + "/#{index}" + File.extname(filename))
end
我的控制台:

98
$ ruby rename.rb
90
$ ruby rename.rb
90
$ ruby rename.rb
90
$ ruby rename.rb
82
$ ruby rename.rb
82
$ ruby rename.rb
74
$ ruby rename.rb
74
$ ruby rename.rb
66

似乎在我第三次运行代码时,一些图像被删除了。

脚本删除文件的唯一方法是删除同名的现有文件。。。您可以检查文件是否已经存在,如下所示:

puts Dir["**/*"].length

folder_path = Dir.pwd

filenames = Dir.glob("*.png")

filenames.each_with_index do |filename, index|
  new_name= folder_path + "/#{index}" + File.extname(filename)
  raise "#{new_name} already exists" if File.exists?(new_name)
  File.rename(filename, new_name)
end

如果要重命名文件,即使存在同名文件,也可以执行以下操作:

folder_path = Dir.pwd
filenames = Dir.glob('*.png')

filenames.each_with_index do |filename, index|
  new_name = folder_path + "/#{index}" + File.extname(filename)
  unless File.exists?(new_name)
       File.rename(filename, new_name)
  else
      index += 1
      new_name = folder_path + "/#{index}" + File.extname(filename)
      File.rename(filename, new_name)
  end
end

不相关,但
{index.to_s}
是冗余的。使用
{}
已经调用了
to_s
,因此您实际上是在执行
index.to_s.to_s
。只需使用
{index}
@meagar updated。如果每次运行脚本时都使用新的文件名更新脚本,例如“/sa#{index}”文件不会被删除。似乎在第三次运行代码时,某些图像会在运行过程中被删除。“-它们被删除了吗?你说好像是这样。我可以一遍又一遍地运行这段代码,它所做的一切命名PNG的0.PNG、1.PNG、2.PNG等似乎都很好。@NickVeys它们在第三次被删除。因为在第二次重命名之前没有检查,所以这个脚本仍然可以覆盖文件。