[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
将 echo.!line! 改为 echo:!line! 能稍微提高效率,另外因为此时line必然不为空,所以可以简化成:
CrLf 发表于 2012-7-27 10:02


遗憾的是,echo:并不比echo.更高效,它们的处理方式是一样的。

TOP

本帖最后由 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.当成外部命令,就会导致错误。
  1. cd .>echo
  2. echo.
  3. pause
复制代码
'echo.' is not recognized as an internal or external command, operable program or batch file.
  1. md echo
  2. echo.
  3. pause
复制代码
没有问题
  1. cd .>echo
  2. setlocal disableextensions
  3. echo.
  4. pause
复制代码
没有问题

在不存在echo文件或者文件夹的情况下echo. echo: echo/的处理是一样的,不存在哪个效率更高的问题;存在echo文件的话echo.会导致错误,更不存在效率问题了。

考虑效率的话,echo, echo; echo=稍微好一些(其实也就少调用了一次GetFileAttributes)。
附件: 您需要登录才可以下载或查看附件。没有帐号?注册
1

评分人数

    • CrLf: 效率确实是一样的,感谢指正!技术 + 1

TOP

回复  Demon


   
噢!这倒没想到,测试结果也确实如此,感谢指正。
不过 echo, echo; echo= 的缺陷 ...
CrLf 发表于 2012-7-27 16:18

在我这里是没有问题的。

TOP

回复  Demon


    试试 echo;/? 和 echo[/?,win7 下测试是有区别的

回复  forfiles


    没有 ...
CrLf 发表于 2012-7-27 16:48


哦,理解错了。

TOP

返回列表