LoginSignup
3
6

More than 3 years have passed since last update.

WindowsパスをURIパスに変換するPowershellワンライナー

Last updated at Posted at 2018-08-04

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]として渡り、変換されたのちクリップボードにコピーされる。
あとは通常通り貼付けすれば良い。

3
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6