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
相关产品推荐
相关产品推荐

