0

我正在尝试编写我的第一个 Ruby 脚本,它将重命名特定文件夹中的文件。我的脚本基于此响应:如何在 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."

非常感谢!

4

2 回答 2

3

如果你想用其他东西替换文件名的一部分,你应该使用类的suborgsub函数String

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

现在在文件名中,您已经存储了一个String代表当前文件名的名称。如果你好奇,你可以使用类instance_of?的函数来检查它:Object

filename.instance_of?(String)
# -> true

你应该做的是使用gsub方法来替换给定字符串的所有出现,或者sub只替换它的第一个。在这里您可以找到使用这些功能的详细信息。

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

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

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

于 2012-07-17T20:30:39.013 回答
0

在 Ruby 中创建带有变量的字符串的一个好方法是:

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

文件名等于“这是我的尤金名字”

因此,对于您询问的文件部分:

"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

于 2012-07-17T20:35:02.000 回答