本帖最后由 CrLf 于 2012-8-3 17:32 编辑
回复 3# Demon
老兄对第 4 点的解释确实很有道理,恍然大悟,实际原因大约就在于此,这和 echo.bat 的原因一致:- echo.bat
- ::先对文件名进行匹配,找不到时再以 echo 命令解读
- echo pause>echo.bat
- echo.bat
- ::由于找到了相应的文件,所以执行的是 echo.bat 而非 echo 命令
- echo test
- ::虽然 bat 可以只靠文件名来调用,但是内部命令例外
复制代码 括号的错误匹配一向是发生在 ) 的多余和缺失上,与 ( 无关,所以括号对中的 echo((1+2)*3=9 只要改成 echo((1+2^)*3=9 就能正确运行了,所以并非 "echo( 通用性最强" 的反例。
另外,不知为何在同样需要搜索文件的前提下,+、[、] 的效率要远高于 .、:、\,反而与 "echo " 接近?
莫非 .、:、\ 效率低下的原因并不是对文件匹配?
测试代码:- @echo off&setlocal enabledelayedexpansion
- for %%a in (" " . : \ + [ ]) do (
- (set timea=!time!
- for /l %%b in (1 1 10000) do echo%%~a
- call :时差 !timea! !time!)>nul
- echo 运行 10000 次 echo%%~a 的用时为: !时差!
- )
- pause
-
- :时差
- for /f "tokens=1-8 delims=:. " %%a in ("%*") do (
- set /a "时差=(((%%e-%%a)*60+1%%f-1%%b)*60+1%%g-1%%c)*100+1%%h-1%%d"
- )
复制代码
|