如何从Ruby中的文件路径中获取文件名?
例如,如果我有一个路径“C:\projects\blah.dll”,我只想要“blah”。
在Ruby中有LastIndexOf方法吗?
如何从Ruby中的文件路径中获取文件名?
例如,如果我有一个路径“C:\projects\blah.dll”,我只想要“blah”。
在Ruby中有LastIndexOf方法吗?
当前回答
如果扩展名不知道(它需要/分隔符):
irb(main):024:0> f = 'C:\foobar\blah.txt'.gsub("\\","/")
=> "C:/foobar/blah.txt"
irb(main):027:0> File.basename(f,File.extname(f))
=> "blah"
其他回答
乔纳森·洛诺夫斯基(Jonathan Lonowski)回答得很完美,但这里没有一个答案提到。可以直接使用` . extname而不是File::extname。*'获取文件名。
File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah"
但是,如果您想要获得任何特定扩展文件的基本文件名,那么您需要使用file::extname,否则不需要。
如果你可以访问ENV变量,扫描结合这个小正则表达式(它可以找到倒数第二个单词,一个点,然后是字符串的最后一个单词),将文件的名称放在'filename'中:
filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/)
显然,你可以在任何包含文件名的路径名上使用scan和regex,而__FILE__是明显的选择:
__FILE__.scan(/\w+\.\w+$/)
Jonathon的答案更好,但要让您知道somelist[-1]是可用的LastIndexOf表示法之一。
krusty。我提到了一些人。最后显然也是。
irb(main):003:0* f = 'C:\\path\\file.txt'
irb(main):007:0> f.split('\\')
=> ["C:", "path", "file.txt"]
irb(main):008:0> f.split('\\')[-1]
=> "file.txt"
注意双引号字符串转义。
'C:\projects\blah.dll'.split('\\').last
你可以获得当前脚本的目录路径:
File.dirname __FILE__