如题,本帖主要对批处理脚本中频繁要用到的子过程或函数进行收集
欢迎大家把自己感觉很实用的小函数或这子过程发来与大家分享,请参照后面的四个尽量发来,也许有更好的算法可以改进,你也必定会受益匪浅, 当然好的东西大家还会加分。
为了保证大家浏览方便,严禁灌水,请不要在此发表与本帖无关的话题,
违者斩!
你若不支持请减分,支持请加分。后续我会不断充实“函数库”的。
大家可以在下面的帖子讨论,交流意见:
http://www.cn-dos.net/forum/viewthread.php?tid=38969&fpage=1 "批处理函数库"
以前我曾发过这个”【共同参与】批处理函数库“的讨论的帖子,效果不是很好,虽然论坛里有不少会员并不暂成这样的做法
,但毫无疑问,”代码重用“可以减少我们编写代码所花费的时间,提高工作效率,虽然这些子过程不能完全扮演高级语言的函数
的角色,但它确实给大家提供了方法或者思想,大家可酌情修改少量部分代码---”为我所用“,有的甚至可以直接照搬过去。
为了这些子过程或类函数真正能起到这些作用,我不得不做些要求,
函数要尽量
通用、高效、封装、简洁。
通用---大部分人都用得上,且常用到,几乎不需要修改或者直接照搬就可以直接使用。
高效---调用一次
函数所花费的时间尽量少。
封装---函数一旦给点不必去管它如何实现,它只起到一个批文件的作用,
简洁---代码简短,结构紧凑。
先举个例子来说明这点:
拿"马甲"的Timediff函数为例
原帖:
http://www.cn-dos.net/forum/viewthread.php?tid=39775&fpage=1(此帖已经更新至----下面)
--------------------------------------------------------------------------------------------------------------------------
有更精简的代码:(标签前加上下滑线表示可以作为库函数调用,以区别于普通的函数)
http://www.cn-dos.net/forum/viewthread.php?tid=37382
计算两个时间点的差Etime
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
rem 算法:
rem 在同一天内两时间点的差:etime=(-)*
rem 要求:所测试任务的执行时间不超过1天
:etime <begin_time> <end_time> <return> // By plp626 On 09-7-20
setlocal&set be=%~1:%~2&set c=(%%d-%%a)*360000+(1%%e-1%%b)*6000+1%%f-1%%c
for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do set/a c=%c%
endlocal&set/a %3=%c:-=8640000-%&exit/b
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
彩色字符函数colstr
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:_colstr ;...
(if %1.==. exit/b)&setlocal enabledelayedexpansion&pushd %tmp%
for /f "tokens=1* delims=:" %%a in ("%1")do (
if %%b.=="%%~b". (set col=%%a
for %%z in ("LBlue=9";"LGreen=A";"LAqua=B";"LRed=C";"LPurple=D";
"LYellow=E";"LWhite=F";"Black=0";"Blue=1";"Green=2";
"Aqua=3";"Red=4";"Purple=5";"Yellow=6";"White=7";"Gray=8";
)do set col=!col:%%~z!
if exist "%%~b?" del/a/q "%%~b?"2>&1
set/p= <nul>"%%~b"2>nul&findstr/a:!col! .* "%%~b?"2>nul 3>&2
) else if %1==\n (echo.
) else if %1==\b (set/p=<nul
) else if %1==\q (set/p=""^"<nul
) else if %1==\t (set/p= <nul&rem 这里是制表符
) else (set/p"=%~1"<nul)
)&(if %2. neq . (shift&endlocal&goto:_colstr))&exit/b
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
基本形式就是
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::思路,基本介绍
::
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:funname <必选参数> ... ... <必选参数> ...
setlocal&rem 写紧凑些
do something
endlocal&if 有返回参数 (set %?=%返回%) else echo %返回%
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Last edited by plp626 on 2009-10-9 at 12:49 ]