在Ruby中重命名脚本

时间:2012-07-17 20:20:00

标签: ruby

我正在尝试编写我的第一个Ruby脚本,它将重命名特定文件夹中的文件。我的脚本基于这个回复:How to rename a file in Ruby?。但是,我需要帮助详细说明一些事情。以下是我目前已经写出的上述链接中的代码。

puts "Renaming files..."

folder_path = "/Desktop/untitled/"

Dir.glob( folder_path + "*" ).sort.each do |f|
  filename = File.basename(f, File.extname(f))
  File.rename( f, folder_path + filename.capitalize + File.extname(f))
end

puts "Renaming complete."

通过这个例子,我知道脚本只是大写原始文件的名称。但是,如果我想在文件名中插入一个段,我该怎么办。比方说我有:     “这是我的名字。”

写出来了。如果我只想关注“我的名字”部分,并将其改为可以说明的内容,我该怎么办?

"This is my (first) name."

此外,如果我想删除一个空格怎么办:

"This is myfirstname."

非常感谢!

2 个答案:

答案 0 :(得分:3)

如果您希望使用其他内容替换部分文件名,则应使用sub类的gsubString函数:

filename = File.basename(f, File.extname(f))

现在,在文件名中,您存储了一个代表当前文件名称的String。您可以使用instance_of?课程的Object功能进行检查,只要您感到好奇:

filename.instance_of?(String)
# -> true

您应该使用gsub方法替换给定字符串的所有出现,或sub仅替换其中的第一个字符串。 Here您可以找到使用这些功能的详细信息。

我认为在你的情况下,这应该可以解决问题:

filename.gsub('my name', 'my (first) name')
# 2nd question:
filename.gsub("my first name", "myfirstname")

此外,subgsub方法允许使用正则表达式。如果你想编写更复杂的模式,你应该试一试,例如从文件中删除所有数字。

答案 1 :(得分:0)

在Ruby中使用变量创建字符串的一种好方法是:

first = "Eugene"
filename = "This is my #{first} name"

filename等于"这是我的Eugene名称"

所以您询问的文件部分是:

"This is my #{folder_path}#{filename.gsub!(' ', '').capitalize}#{File.extname(f)}"

可以使用gsub删除空格 (查看字符串类文档http://www.ruby-doc.org/core-1.9.3/String.html):

filename.gsub(' ', '')

您还可以使用File classes join方法将字符串连接到路径中,并避免跨平台的跨平台问题(' /' vs' \') 有关详情,请参阅http://www.ruby-doc.org/core-1.9.3/File.html#method-c-join