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

ファイル名の一部を別のものに置き換えたい場合は、クラスのsubまたはgsub関数を使用する必要があります。String

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

Stringfilename には、現在のファイルの名前を表すが格納されています。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また、 andメソッドでは正規表現を使用できgsubます。ファイルからすべての数値を削除するなど、より複雑なパターンを書きたい場合は、試してみてください。

于 2012-07-17T20:30:39.013 に答える
0

Ruby で変数を使用して文字列を作成する良い方法は次のとおりです。

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

filename は "This is my Eugene 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 クラスの join メソッドを使用して、文字列をパスに連結し、スラッシュ ('/' と '\') によるクロス プラットフォームの問題を回避することもできます。詳細については、http://www.ruby-doc.org/core-1.9 を参照してください。 3/File.html#method-c-join

于 2012-07-17T20:35:02.000 に答える