本帖最后由 Demon 于 2012-7-27 15:14 编辑
回复 Demon
"." 会额外触发对文件名的匹配,参考:
CrLf 发表于 2012-7-27 14:15
CMD对echo. echo: echo\的处理过程是一样的。
如果在命令中发现.:\,并且CMD拓展是开启的话,就会调用GetFileAttributes函数获取文件的属性,如果文件不存在或者文件是目录的话,那么就会把.:\改成NUL;否则会当成外部命令。
但是GetFileAttributes有个BUG,会把echo.当成是echo,所以如果存在以echo为名称的文件的话,GetFileAttributes会认为echo.文件是存在的,然后CMD把echo.当成外部命令,就会导致错误。复制代码 'echo.' is not recognized as an internal or external command, operable program or batch file.复制代码 没有问题- cd .>echo
- setlocal disableextensions
- echo.
- pause
复制代码 没有问题
在不存在echo文件或者文件夹的情况下echo. echo: echo/的处理是一样的,不存在哪个效率更高的问题;存在echo文件的话echo.会导致错误,更不存在效率问题了。
考虑效率的话,echo, echo; echo=稍微好一些(其实也就少调用了一次GetFileAttributes)。 |