如何在Windows上使用Ruby解决UNC路径?

Sve*_*ven 5 ruby windows unc

我正试图通过irbWindows 访问UNC共享.在Windows shell中它将是

\\server\share
Run Code Online (Sandbox Code Playgroud)

我试图逃避所有的反斜杠.

irb(main):016:0> Dir.entries '\\\\server\share'
Errno::ENOENT: No such file or directory - \\server\share
Run Code Online (Sandbox Code Playgroud)

并使用IP地址而不是名称

irb(main):017:0> Dir.entries '\\\\192.168.10.1\share'
Errno::ENOENT: No such file or directory - \\192.168.10.1\share
Run Code Online (Sandbox Code Playgroud)

ILo*_*Log 6

尝试用另一个'\'来逃避'\'

Dir.entries( '\\\\ 192.168.10.1 \\共享')

  • 我的天.我的路径中有一个拼写错误...但是,它适用于双反斜杠.感谢大家... (2认同)

Ant*_*ean 6

Ruby以POSIX方式解释路径,这意味着你应该尽可能使用正斜杠.

//server/share
Run Code Online (Sandbox Code Playgroud)

尾部斜杠是不必要的,就像在本机Windows中一样.您可以使用反斜杠,但他们必须逃脱用一个反斜杠.

\\\\server\\share
Run Code Online (Sandbox Code Playgroud)

我只建议你直接从本机程序传递UNC路径而不能转换它们.当我混合Ruby/Windows路径时,比如使用Ruby方法和本机Windows应用程序的构建脚本,每个需要不同的路径,我会使用一些帮助程序:

def windows_path(value)
  value.gsub '/', '\\'
end

def posix_path(value)
  value.gsub '\\', '/'
end
Run Code Online (Sandbox Code Playgroud)

如果您是路径,请始终将路径用单引号括起来,如果是内插则用双引号括起来.正斜杠告诉Ruby开始解释正则表达式.对于我来说,这是一个常见的错误.

irb> File.exists? //server/share
SyntaxError: (irb):2: unknown regexp options - rvr
Run Code Online (Sandbox Code Playgroud)