Ruby 将windows路径转换为Linux路径

Ruby 将windows路径转换为Linux路径,ruby,path,Ruby,Path,目前我获得的路径为\\documents\videos\form.mov,但需要将路径更改为/documents/videos/form.mov。我尝试过使用路径分隔符和split。但它不允许分割路径,因为“\”是转义字符 谁能帮我一下吗 path = '\\\\documents\videos\form.mov' new_path = path.gsub /\\+/, '/' puts path, new_path 输出 \\documents\videos\form.mov /docu

目前我获得的路径为
\\documents\videos\form.mov
,但需要将路径更改为
/documents/videos/form.mov
。我尝试过使用路径分隔符和
split
。但它不允许分割路径,因为“\”是转义字符

谁能帮我一下吗

path = '\\\\documents\videos\form.mov'

new_path = path.gsub /\\+/, '/'

puts path, new_path
输出

\\documents\videos\form.mov
/documents/videos/form.mov
这是一份
irb
会话的副本

E:\Ruby\source>irb --simple-prompt
>> path = '\\\\documents\videos\form.mov'
=> "\\\\documents\\videos\\form.mov"
>> new_path = path.gsub /\\+/, '/'
=> "/documents/videos/form.mov"
>>

现有的答案不符合我的期望,所以我不得不自己动手。下面是模块及其单元测试

module ConvertWindowsPath
  def convert_windows_path windows_path
    manipulated_windows_path = windows_path.clone
    unix_path = ""
    if windows_path.start_with? "\\\\" #it's on some network thing
      unix_path = "//"
      manipulated_windows_path = manipulated_windows_path[2..-1]
    elsif manipulated_windows_path.start_with? "\\"
      unix_path = "/"
    end
    unix_path += manipulated_windows_path.split("\\").join("/")
    unix_path += "/" if manipulated_windows_path.end_with?("\\")
    unix_path
  end
end

require 'test/unit'

class ConvertWindowsPathTest < Test::Unit::TestCase
  include ConvertWindowsPath
  def setup
    @expectations = {
      "C:\\" => "C:/",
      "\\\\vmware-host\\Shared Folders\\Foo\\bar-baz" => "//vmware-host/Shared Folders/Foo/bar-baz",
      "D:\\Users\\ruby\\Desktop\\foo.txt" => "D:/Users/ruby/Desktop/foo.txt",
      "z:\\foo\\bar\\" => "z:/foo/bar/"
    }
  end
  def test_expectations
    @expectations.each do |windows_path, expected_unix_path|
      assert_equal expected_unix_path, convert_windows_path(windows_path)
    end
  end
end
模块路径
def转换窗口路径窗口路径
已操纵的\u windows\u路径=windows\u路径.clone
unix_path=“”
如果windows\u path.start\u与?“\\\\\”是在某个网络上
unix_path=“/”
操纵的\u窗口\u路径=操纵的\u窗口\u路径[2..-1]
elsif\u windows\u path.start\u与?"\\"
unix_path=“/”
结束
unix\u path+=已操纵的\u windows\u path.split(\\”).join(“/”)
unix\u路径+=“/”如果操作了\u windows\u路径。以?(“\\”)结束\u
unix\u路径
结束
结束
需要“测试/单元”
类ConvertWindowsPathTest“C:/”,
“\\\\vmware主机\\共享文件夹\\Foo\\bar baz”=>“//vmware主机/共享文件夹/Foo/bar baz”,
“D:\\Users\\ruby\\Desktop\\foo.txt”=>“D:/Users/ruby/Desktop/foo.txt”,
“z:\\foo\\bar\\”=>“z:/foo/bar/”
}
结束
def测试单位期望值
@expections.each do|windows_路径,expected|unix_路径|
断言等于预期的unix路径,转换windows路径(windows路径)
结束
结束
结束

您如何“获得路径”?你尝试过什么(显示你的代码)?我没有ruby方面的经验,但通常你可以通过加倍转义字符(“\\”将匹配文字反斜杠字符)来转义转义字符。“但是它不允许分割路径,因为“\”是转义字符。”好吧,这部分很容易修复。只需使用两个反斜杠(第一个反斜杠避开第二个反斜杠)。看看这篇文章,它可能会解决你的问题。在这里,您使用了单引号中的路径…因此它会将路径更改为“\\\\documents\\videos\form.mov”,因此很容易转换,但在我的情况下…我从用户处获取路径…即用户正在输入路径,因此他不会在单引号中输入路径。当我尝试您的路径解决方案时,它将我的输出作为
path=“\\\\documents\videos\form.mov”=>“\\\\documents\videos\form.mov”2.0.0p0:031>new\u path=path.gsub/\\+/,'/'=>“/documents\videos\form.mov”
您的代码版本不起作用,因为您使用了双引号。引号不会“改变路径”。引号的选择只是确定翻译的特殊序列,因此在双引号中表示换行符,在单引号中表示rwo字符。如果您的用户正在输入
\\documents\videos\form.mov
作为提示的输入,那么这正是您的字符串将包含的内容(末尾有一个换行符,您需要
chomp
。如果您仍然卡住,请详细描述您的程序。