我正在尝试编写我的第一个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."
非常感谢!
答案 0 :(得分:3)
如果您希望使用其他内容替换部分文件名,则应使用sub
类的gsub
或String
函数:
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")
此外,sub
和gsub
方法允许使用正则表达式。如果你想编写更复杂的模式,你应该试一试,例如从文件中删除所有数字。
答案 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