Sambaで作成した共有フォルダとかにファイルを配置した場所を共有したいとき、
Windowsでは\\server-name\fuga
というパスで表示されるが、
メールやチャットで貼り付ける場合、file://server-name/fuga
のURIパスにする必要があったので書いた。
$URIPath = $WindowsPath -replace "\\\\", "" -split "\\" | % {[uri]::EscapeUriString($_) } | % -Begin {$acc = "file:/"} {$acc += "/$_"} -End {Write-Output "$acc"}
なんかもっとかっこいい感じで短く書く方法はある気がするが、まぁ使える。
EscapeUriStringでマルチバイト文字もうまくURLエンコードされるはず。
実際に使うには
変換は上記のスクリプトでできるが、実際の作業で使う際にはクリップボードにコピーできるようにする必要がある。
PowerShellスクリプトの実行ポリシーは変更されている前提として、以下のようなスクリプトを書く。
# toURIPath.ps1
$Args[0] -replace "\\\\", "" -split "\\" | % {[uri]::EscapeUriString($_) } | % -Begin {$acc = "<file:/"} {$acc += "/$_"} -End {Write-Output "$acc>"} | clip
これを任意の場所に配置したら、エクスプローラでshell:sendto
を開き、リンク先に
powershell <toURIPath.ps1のパス>
を指定し、「URIパス生成」など任意の名前をつけて保存する。
こうすれば、共有フォルダ上のファイルを右クリックすると送るのメニューに「URIパス生成」が表示され、選択すると選択したファイルのパスが\$Args[0]として渡り、変換されたのちクリップボードにコピーされる。
あとは通常通り貼付けすれば良い。