To All:
最近,在与 namejm 兄讨论完善一个关于定期备份的批处理时,遇到了一个问题,在此提出请各位指教。
在使用 cmd /f:on 开启自动完成特性后发现,如果测试目录下存在中文名的目录或文件,那么使用Ctrl+D或Ctrl+F可以正常完成这个目录或文件名,但是在继续使用Ctrl+D或Ctrl+F完成,并且下一个目录或文件的名字长度短于已完成的目录或文件名,则在显示新目录或文件的名字后,旧的目录和文件名并未完全消失,而会残留一定的痕迹。
例如,测试文件夹仅有两个文件,分别名为“长文件名”和“短名”,则在cmd /f:on 开启自动完成后,第一次按下Ctrl+F会显示“长文件名”,而第二次按下Ctrl+F会显示“短名 名”。
需要说明的是,旧文件残留的痕迹不会影响新文件的正常识别。
据分析,这应该是自动完成未能正确处理多字节字符(包括中文)文件名所造成的。在上述的测试中,第二次自动完成前,它仅仅清除了上一次显示的前三个汉字,宽度相当于6个英文字符。这似乎是cmd将上一次完成的文件名按Unicode规则将字符串长计算为4,再加上回车所代表的0d/0a两个字符,共6个。也就是说cmd以6个英文的空白字符重写了原来的文件名,以清除其显示内容,而可能未考虑到多字节字符的显示宽度要数倍于英文字符。
文件备份器
http://www.cn-dos.net/forum/viewthread.php?tid=20747&fpage=1
最近,在与 namejm 兄讨论完善一个关于定期备份的批处理时,遇到了一个问题,在此提出请各位指教。
在使用 cmd /f:on 开启自动完成特性后发现,如果测试目录下存在中文名的目录或文件,那么使用Ctrl+D或Ctrl+F可以正常完成这个目录或文件名,但是在继续使用Ctrl+D或Ctrl+F完成,并且下一个目录或文件的名字长度短于已完成的目录或文件名,则在显示新目录或文件的名字后,旧的目录和文件名并未完全消失,而会残留一定的痕迹。
例如,测试文件夹仅有两个文件,分别名为“长文件名”和“短名”,则在cmd /f:on 开启自动完成后,第一次按下Ctrl+F会显示“长文件名”,而第二次按下Ctrl+F会显示“短名 名”。
需要说明的是,旧文件残留的痕迹不会影响新文件的正常识别。
据分析,这应该是自动完成未能正确处理多字节字符(包括中文)文件名所造成的。在上述的测试中,第二次自动完成前,它仅仅清除了上一次显示的前三个汉字,宽度相当于6个英文字符。这似乎是cmd将上一次完成的文件名按Unicode规则将字符串长计算为4,再加上回车所代表的0d/0a两个字符,共6个。也就是说cmd以6个英文的空白字符重写了原来的文件名,以清除其显示内容,而可能未考虑到多字节字符的显示宽度要数倍于英文字符。
文件备份器
http://www.cn-dos.net/forum/viewthread.php?tid=20747&fpage=1
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
