不知道大家是否留意过Windows系统文件的「属性」→「安全」→「对象名称」这里显示的路径信息?这里其实隐藏着一个大坑!
问题背景
公司电脑的配置实在太差,所以我在公司电脑上关闭了所有软件的自启动功能,但又不希望每次开机后手动启动所有需要的软件。于是我编写了多个批处理脚本,根据不同场景一键启动相应的软件组合。
例如,下面这个脚本用于启动我常用的通讯和录屏工具:
:: 让文本用UTF8编码
chcp 65001
start "" "D:\baoxinwen\tools\EVCapture\EVCapture.exe"
start "" "D:\baoxinwen\QQNT\QQ.exe"
start "" "D:\baoxinwen\WeChat\WeChat.exe"
start "" "D:\baoxinwen\WXWork\WXWork.exe"
问题出现
最近微信升级到 4.1.0 版本后,更改了安装路径和启动程序位置,从原来的 D:\baoxinwen\WeChat\WeChat.exe
变为 D:\baoxinwen\Weixin\Weixin.exe
。
为了方便,我直接从文件属性的「对象名称」字段复制了新路径。更新后的脚本如下:
:: 让文本用UTF8编码
chcp 65001
start "" "D:\baoxinwen\tools\EVCapture\EVCapture.exe"
start "" "D:\baoxinwen\QQNT\QQ.exe"
start "" "D:\baoxinwen\Weixin\Weixin.exe"
start "" "D:\baoxinwen\WXWork\WXWork.exe"
表面上看一切正常,但运行时却出现了「Windows找不到文件」的错误提示:
我确认了文件确实存在,路径也正确,为什么系统会找不到呢?
问题排查
将问题行单独复制到CMD中执行时,发现了异常:
路径前面竟然多出了一个看不见的空格!但在记事本中查看时,这个空格并不可见:
只有通过退格键删除这个不可见字符后,脚本才能正常运行。
问题分析
实际上,这个问题是由于Windows在「对象名称」字段中包含了不可见的Unicode控制字符导致的。这些字符在可视化界面中不显示,但复制时会一并被复制,导致路径无效。
Windows系统中的这个「隐藏特性」确实是个不小的坑。在日常使用中,如果需要从文件属性中复制路径,建议:
- 粘贴后仔细检查路径前后是否有不可见字符
- 或者直接使用文件资源管理器的地址栏复制路径
- 对于脚本中的路径,最好手动输入或从地址栏复制
这个小问题再次证明了Windows系统确实存在许多意想不到的「特性」,需要我们在日常使用中多加留意。
默认评论
Halo系统提供的评论