結論
- Windows → WSL:
wslpath 'C:\path\to\file'
- PowerShell経由で:
wsl wslpath "'C:\path\to\file'"
- WSL → Windows:
wslpath -w '/mnt/c/path/to/file'
- PowerShell経由で:
wsl wslpath -w /mnt/c/path/to/file
- 辞書:
-u
,-w
,-a
,-m
オプションの意味 - WSL環境で使える
.bashrc
のショートカット関数:例wincd() { cd "$(wslpath "$1")"; }
概要:なぜ変換が必要か?
Windowsではパス区切りに \
(バックスラッシュ)、ドライブ名に C:\...
の形式を使います。一方、WSL(Ubuntuなど)では /mnt/c/...
にマウントされ、区切り文字は /
(スラッシュ)。そのままでは使えないため、変換が必要です。
基本的な使い方:WSL上での変換
WSLのbash(Linux)環境で、
wslpath 'C:\Windows\Media'
と入力すると以下のように変換されます:
/mnt/c/Windows/Media
これは、Windows形式のパスをLinux形式に変換する -u
がデフォルト動作(Windows → WSL)だからです。(turn0search11)
PowerShellからも使える
PowerShellでは、次のように wsl
コマンドを付けて呼び出します:
wsl wslpath "'C:\Windows\Media'"
返り値:
/mnt/c/Windows/Media
シングルクオート内のバックパスを適切にエスケープすることで確実に変換できます。
逆方向の変換(WSL→Windowsパス)
WSL(bash)側:
wslpath -w '/mnt/c/Windows/Media'
→ C:\Windows\Media
PowerShell側:
wsl wslpath -w /mnt/c/Windows/Media
→ C:\Windows\Media
オプション解説(マニュアルより)
-u
:Windows → WSL(デフォルト)-w
:WSL → Windows-a
:絶対パスを強制-m
:Windows 形式で/
を使う形式
補足:PowerShellでの引用とエスケープ問題
PowerShellでは、バックスラッシュ \
は文字列では特別扱いされない場合が多いですが、正しく渡すにはエスケープを意識する必要があります:
- 失敗例(エスケープされず動作しない)
wsl wslpath 'C:\Windows\Media'
- 成功例
wsl wslpath 'C:\\Windows\\Media' wsl wslpath "'C:\Windows\Media'" wsl wslpath '"C:\Windows\Media"'
このように、正しくクオートやエスケープして渡すと安心して変換できます。
コメント