結論
- 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"'
このように、正しくクオートやエスケープして渡すと安心して変換できます。


コメント