Windows 逆天兼容性碰到了目录不加双引号的应用程序的逆天问题

事件起因

前一阵子折腾 Sleepy Android, 捣鼓 Android Studio, JDK, Kotlingradle

Kotlin 安装在 C:/Program Files 不会存在任何问题, 但是安装在 D:/Program Files 会报错找不到文件

问题分析

JetBrain Kotlin 没有正确处理 Windows 下的目录空格问题 (没加引号), 参见 JetBrain/kotlin #4872 Add quotes to Windows paths

这个 PR 在 22年就有人发了, 还没被合并, JetBrain 效率感人

至于为什么安装在 C:/Program Files 没有任何问题, 这就得从 DOS 8.3 说起了, 详细点这里

简单来说就是 C 盘下的 Program Files 有一个短文件名 PROGRA~1, 应用程序会优先使用这个

解决方案

C: 使用 dir /a /x 可以查看目录的短文件名

C:\>dir /a /x
 驱动器 C 中的卷没有标签。
 卷的序列号是 2333-2333

 C:\ 的目录

2025/02/16  23:33    <DIR>                       $Recycle.Bin
2025/02/16  23:33    <DIR>          $SYSRE~1     $SysReset
2025/02/16  23:33    <JUNCTION>     DOCUME~1     Documents and Settings [C:\Users]
2025/02/16  23:33    <DIR>                       PerfLogs
2025/02/16  23:33    <DIR>          PROGRA~1     Program Files
2025/02/16  23:33    <DIR>          PROGRA~2     Program Files (x86)
2025/02/16  23:33    <DIR>          PROGRA~3     ProgramData
2025/02/16  23:33    <DIR>                       Recovery
2025/02/16  23:33    <DIR>          SYSTEM~1     System Volume Information
2025/02/16  23:33    <DIR>                       Users
2025/02/16  23:33    <DIR>                       Windows

在其他盘使用 fsutil file setshortname <longfilename> <shortfilename> 即可设置 DOS 8.3 短文件名

设置的时候记得关闭当前目录下的应用程序 (包括后台进程和服务)

参考命令

设置的时候记得关闭当前目录下的应用程序 (包括后台进程和服务)
  • x86_64 (Intel/AMD处理器 64位系统)
fsutil file setshortname "Program Files" PROGRA~1
fsutil file setshortname "Program Files (x86)" PROGRA~2
fsutil file setshortname "ProgramData" PROGRA~3
最后修改:2025 年 02 月 16 日
如果觉得我的文章对你有用,请随意赞赏