2019年2月21日星期四

别忘了DOS只支持8个字符的文件名

我有一个专门用来烧录BIOS文件的可启动MS-DOS U盘, 每次启动后DOS系统都会通过autoexec.bat文件自动调用一个文件名为spiflash.exe的程序进行BIOS烧录。
一天,我需要用一个高版本的spiflash.exe程序烧录另一种模块的BIOS. 我担心高版本的spiflash.exe程序对原来的CPU模块兼容不好,就没有把U盘上原来的程序覆盖掉,而是更名为spiflash2.exe存储在了U盘上,并修改了autoexec.bat中的命令。接下来诡异的事情发生了。
每次U盘启动后,看上去autoexec.bat调用的是spiflash2.exe, 但实际运行的spiflash.exe程序还是低版本的。我一直以为是供应商发错了,把低版本误作高版本发给了我,供应商又发给我几次,一直都不行,就这样和供应商扯皮了一下午时间。
后来我才认识到,DOS只支持8.3格式的文件名,也就是文件名不超过8个字符,扩展名不超过3个字符。我重命名后的spiflash2.exe, 文件名已经达到9个字符,虽然autoexec.bat中调用的程序是spiflash2.exe, 但DOS底层只取了前8个字符,也就是spiflash, 所以仍然执行的是低版本程序。