如何从Ruby文件path中获取文件名
如何从Ruby中的文件path获取文件名?
例如,如果我有一个"C:\projects\blah.dll"的path,我只想要“等等”。 
  Ruby中有一个LastIndexOf方法吗? 
 require 'pathname' Pathname.new('/opt/local/bin/ruby').basename # => #<Pathname:ruby> 
我很久没有使用Windows用户了,但是path名rdoc表示在Windows上与目录名分隔符没有任何问题。
 尝试File.basename 
返回file_name中给定的文件名的最后一个组成部分,无论本地文件系统上使用哪个分隔符,都必须使用正斜杠(“/”)组成。 如果给出了后缀并存在于file_name的末尾,则会将其删除。
File.basename("/home/gumby/work/ruby.rb") #=> "ruby.rb" File.basename("/home/gumby/work/ruby.rb", ".rb") #=> "ruby"
在你的情况下:
 File.basename("C:\\projects\\blah.dll", ".dll") #=> "blah" 
如果扩展名不知道(它需要/分隔符):
 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)完美地回答,但是这里没有提到任何答案。 而不是File::extname ,你可以直接使用'.*'来获取文件名。 
 File.basename("C:\\projects\\blah.dll", ".*") # => "C:\\projects\\blah" 
 但是,如果你想得到任何特定的扩展文件的基本文件名,那么你需要使用File::extname ,否则不需要。 
试试这个代码
 使用extname 
  File.basename("a/b/d/test.rb", File.extname("a/b/d/test.rb")) #=> "test" 
 乔纳森的答案是更好的,但让你知道somelist[-1]是可用的LastIndexOf记法之一。 
 正如krusty.ar提到的somelist.last显然也是如此。 
 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" 
请注意,双引号string转义\。
 'C:\projects\blah.dll'.split('\\').last 
 如果你有权访问ENVvariables, scan结合这个小正则expression式(find最后一个单词,一个点,然后是string的最后一个单词)将把文件的名称放在'filename'中: 
 filename = ENV['SCRIPT_NAME'].scan(/\w+\.\w+$/) 
 很明显,你可以在任何包含文件名的path名上使用scan和regex,而__FILE__是明显的select: 
 __FILE__.scan(/\w+\.\w+$/) 
您可以通过以下方式获取当前脚本的目录path
 File.dirname __FILE__