WindowsプラットフォームのRubyスクリプトで、このような形式でネットワークパスにアクセスしようとしています。
\\servername\some windows share\folder 1\folder2\
これをパスとして使用しようとすると、機能しません。このスクリプトでは、単一の円記号が適切にエスケープされていません。
path = "\\servername\some windows share\folder 1\folder2\"
d = Dir.new(path)
パス内のスラッシュを適切にエスケープするために、考えられるすべてのことを試みました。ただし、特別な意味があるため、その1つの円記号を回避することはできません。一重引用符、二重引用符、バックスラッシュ自体をエスケープし、%Q {}や%q {}などの代替引用符を使用し、ASCIIから文字への変換を使用してみました。私が正しくやっていないという意味では何も機能しません。 :-)現時点での一時的な解決策は、そのパスを指すネットワークドライブN:\をマップし、その方法でアクセスすることですが、それは解決策ではありません。
誰かが単一のバックスラッシュを適切にエスケープする方法を知っていますか?
ありがとうございました
次のように、すべてのバックスラッシュを2倍にするだけです。
"\\\\servername\\some windows share\\folder 1\\folder2\\"
これを試して
puts '\\\\servername\some windows share\folder 1\folder2\\'
#=> \\servername\some windows share\folder 1\folder2\
文字列を定義するために一重引用符を使用している限り(例:'foo'
)、単一の\
をエスケープする必要はありません。 次の2つの場合を除く
\\
は単一の\
になります。したがって、\\\\
は、必要な開始\\
を提供します。\
は終了引用符をエスケープしようとするため、そこにも\\
が必要です。エレガントなヘルパーを自分で定義できます。不格好な\
パスセパレータを使用する代わりに、次のようなメソッドと組み合わせて/
を使用できます。
def windows_path(foo)
foo.gsub('/', '\\')
end
puts windows_path '//servername/some windows share/folder 1/folder2/'
#=> \\servername\some windows share\folder 1\folder2\
甘い!