You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2快捷方式拖放无空格文件名时反斜杠丢失问题求助

问题描述

在Windows 10系统中运行WSL2 Debian,创建了指向Bash脚本的桌面快捷方式,希望通过拖放多个文件让脚本处理,但遇到异常:

  • 文件名包含空格时,路径传递正常
  • 无空格文件名的路径反斜杠会被全部移除,例如C:\Users\Me\file.txt会变为C:UsersMefile.txt

相关信息

  • 快捷方式命令:C:\Windows\System32\wsl.exe -- /home/myuser/bin/hi.sh
  • 脚本hi.sh前两行内容:
#!/bin/bash
echo "Received $@"
  • 拖放测试文件:
C:\Users\Me\Desktop\file-no-spaces.wav
C:\Users\Me\Desktop\File With Spaces.wav
  • 实际输出:
Received C:UsersMeDesktopfile-no-spaces.wav C:\Users\Me\Desktop\File With Spaces.wav

由于路径已被截断,wslpath工具无法正常解析,需解决Windows移除反斜杠的问题。

解决方法

核心问题是Windows传递无空格路径时,会将反斜杠视为转义字符而非路径分隔符,导致WSL接收到的路径丢失分隔符。只需修改快捷方式的目标命令,让参数被正确包裹传递:

将快捷方式的命令修改为:

C:\Windows\System32\wsl.exe -- bash -c '/home/myuser/bin/hi.sh "$@"' _ %*

原理说明

  • bash -c 让WSL启动bash并执行指定命令
  • "$@" 会将后续参数(拖放的文件路径)以带引号的形式传递给脚本,完整保留路径中的反斜杠
  • _ 是bash -c执行时的占位参数(对应$0),确保Windows传递的所有拖放文件(%*)被正确映射到$@
  • %* 代表Windows传递的所有拖放文件路径

修改后再拖放文件,脚本就能接收到完整的带反斜杠路径,之后可正常使用wslpath将Windows路径转换为WSL路径处理。

内容的提问来源于stack exchange,提问作者kr37

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 01:01:07