我也觉得楼主现在的问题主要是算法...
批处理和别的语言或脚本不一样,它是短小简便的,不需要太复杂的变量环境,而且变量长度也会在一定程度上影响运行效率,所以我们一般都用简写,比如我个人就偏爱 a、b、c、m、n、str、var、@1、@2、@3、tmp 这样简洁的变量名。
你可以看看别人写的批,短小的变量名若使用得当,同样可以申明它的功能
批处理获取指定天数之前的日期
http://bbs.bathome.net/thread-3330-1-1.html
至于算法就有点抽象了,一方面考验你对命令的熟悉程度(基础运用以及命令的细节),一方面考验你的想象力,另一方面还考验了你的眼界(所以看到没见过的好算法时就把它记住吧),好的算法要么高效要么简洁,举个例子:- for /f %%a in (1.txt) do (
- for /f %%b in (2.txt) do if %%a==%%b echo %%b
- )
复制代码 或- for /f %%a in (1.txt) do findstr "%%a" 2.txt
复制代码 可以改成:- setlocal enabledelayedexpansion
- for /f %%a in (1.txt) do set "str=!str! %%a"
- findstr "!str!" 2.txt
复制代码 也可以改成:- (for /f %%a in (1.txt) do echo %%a)>key.txt
- findstr /g:key.txt 2.txt
复制代码 后两种都比前两种要高效得多,为什么?因为第一种的循环次数是 "1.txt 有效行数"*"2.txt 有效行数",而第二种里用的 findstr 则是外部命令,每次使用时 cmd 都要开一个名为 findstr.exe 的子进程,所以这两种算法都是比较差的算法。
后两种之所以高效,是因为它们循环次数少,而且外部命令也只是各使用了一次,效率大大提高,这种算法就比前两种要好得多。 |