批处理程序中存在某些构造会减慢执行速度。唯一对此有重大影响的结构是通过GOTO
组装一个循环,而不是任何类型的FOR
命令。如果用FOR
命令重写包含许多GOTO
的大型程序,则可以节省大量时间。影响这一点的另一个方面是程序所具有的命令/行的数量,也就是说,得到的结果比具有较少行的另一个结果的程序运行得更快。用较少的命令实现相同的事情的方法是充分利用批处理文件功能。
例如,下面的代码:
set /A b=a+8
set /A c=b*2
set /A d=c+e
...跑的比这个要慢:
set /A b=a+8, c=b*2, d=c+e
此代码:比这
command-that-return-errorlevel
if %errorlevel% equ 1 goto label-1
if %errorlevel% equ 2 goto label-2
if %errorlevel% equ 3 goto label-3
...运行速度较慢一个:
command-that-return-errorlevel
for %%e in (1 2 3) do if %errorlevel% equ %%e goto label-%%e
......和以前比这个慢一个运行:
command-that-return-errorlevel
goto label-%errorlevel%
缩短变量名在执行速度非常小的影响。
这样,最好的选择是从一开始就使用这些技术编写批处理文件。有没有简单的方法来开发一个程序,读取批处理文件并执行以前的更改,即用FOR
替换GOTO
,并将少数几行中的数行“压缩”。
如果你克服了你会遇到的问题,它会把一个写得很好的批处理文件变成一段难以阅读的代码,没有任何好处。如果将批处理文件大小减少2 KB,那么硬盘驱动器上的簇大小通常会超过8 KB,而且此类批处理文件的运行速度不会超过任何合理的基准。这将是一个有趣的(也可能令人沮丧的)练习。 :) – foxidrive