在 Windows 与 WSL 路径之间转换,供跨系统命令传参。
wslpath 是 WSL 发行版内的小工具,把 Windows 盘符路径转成 /mnt/c/...,或把 Linux 路径转成 Windows 可识别的 \\wsl.localhost\<发行版>\...。默认方向是 Windows 转 Linux;-u 强制转 Unix 路径,-w 转 Windows 路径,-m 转成带盘符和正斜杠的形式(如 C:/Users/me),-a 把相对路径转成绝对路径。
它主要做字符串转换,不验证目标是否存在,也不改变文件权限。WSL1 和 WSL2 都有这个工具,但 WSL2 通过 9P 访问 /mnt/c,大量小文件操作会明显变慢。/mnt/c 这个挂载点可以在 /etc/wsl.conf 的 [automount] 里改,所以可移植脚本不要硬编码,应该用 wslpath 推导。
从 CMD 调用时写 wsl wslpath ...,默认在默认发行版里执行;需要指定发行版用 wsl -d <名称> -- wslpath ...。转换出的 \\wsl.localhost\ 在较新 Windows 上可用,老版本或部分应用只认 \\wsl$\<发行版>\...;-m 适合需要 C:/ 形式路径的 Windows 程序。
# 1. Windows 路径转 WSL 路径,输出 /mnt/c/Users/me/project
C:\> wsl wslpath -u "C:\Users\me\project"
# 2. Linux 路径转 Windows UNC 路径,便于资源管理器或 Windows 程序打开
C:\> wsl wslpath -w /home/me/project
# 3. 转成带盘符的正斜杠形式,输出 C:/Users/me
C:\> wsl wslpath -m /mnt/c/Users/me
# 4. 路径含空格时仍要加引号,否则参数会被拆开
C:\> wsl wslpath -u "C:\Program Files\App"
# 5. 指定发行版,避免默认发行版不是目标环境
C:\> wsl -d Ubuntu -- wslpath -w /home/me/notes.txt
# 6. D 盘转成 D:/data,适合传给只认盘符路径的 Windows 工具
C:\> wsl wslpath -w /mnt/d/data
# 7. 把转换结果交给 Windows 程序;批处理里 %i 要写成 %%i
C:\> for /f "delims=" %i in ('wsl wslpath -w /home/me/notes.txt') do notepad.exe "%i"
wslpath 会提示找不到命令,因为它是 WSL 内的工具;用 wsl wslpath ...,或先进入 WSL 再调用。wslpath C:\Users\me 可能被 shell 改写;在 WSL 内用单引号 wslpath 'C:\Users\me',在 CMD 里用双引号。-w 的输出在新系统上常是 \\wsl.localhost\Ubuntu\...,老系统是 \\wsl$\Ubuntu\...;应用打不开时先换另一种 UNC 前缀,或映射网络驱动器。-m 主要用于 /mnt/c 这类 Windows 盘符路径,输出 C:/...;不要拿它转换纯 Linux 家目录后假设一定得到可用盘符路径。-a 时相对路径可能原样保留,脚本里应显式用 -a 或先 cd 到确定目录;wslpath 不会检查路径是否存在,拼错也会返回结果。cd "$(wslpath -u 'C:\Program Files\App')",否则会被拆成多个参数。/mnt/c:/etc/wsl.conf 可以改 automount 根目录,换机器后路径会失效;用 wslpath 或 $WSLENV 传递更稳。wslpath 的结果切换目录合上页面,先回答,再展开对照。
wslpath -u、-w、-m 分别输出什么形式?wslpath 会失败?正确写法是什么?\\wsl.localhost\ 打不开时,应该尝试什么替代形式?-u 转 Unix 路径(如 /mnt/c/...),-w 转 Windows UNC 路径,-m 转带盘符的正斜杠路径(如 C:/...)。wsl wslpath ... 或进入 WSL 后调用。\\wsl$\<发行版>\...,或把该路径映射为网络驱动器。
小程序版
微信扫码,随时查命令