|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
31 楼』:
短鸣和长鸣函数
usage:
call :beep
call :Long_Beep
goto eof
:: ----------------------------------------------------------------------
:beep
@echo
goto :eof
:: ----------------------------------------------------------------------
:Long_Beep
choice /? >nul 2>&1 && ( echo zy|CHOICE /C YN /D Y /T 1 >nul )
choice /? >nul 2>&1 || call :beep
goto :eof
:: ----------------------------------------------------------------------
|
|
2009-6-7 04:18 |
|
|
uiopuiop
中级用户
积分 400
发帖 211
注册 2007-9-30
状态 离线
|
『第
32 楼』:
speak 函数
:speak \\ call :speak "speak the words ...."
mshta vbscript:createobject("sapi.spvoice").speak(%1)(window.close)
goto :eof 大家有好的函数,拿出来贴啊,不要藏着!!!
[ Last edited by uiopuiop on 2009-6-7 at 04:27 ]
|
|
2009-6-7 04:20 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
33 楼』:
批处理浮点加法函数,再次精简提速了!
@echo off
set aa=%time%
for /l %%a in (1,1,1000) do call :_ADD 123456722222222222222890.3212222222222222222222222 1222222222222222222.789233333333333333333333333
set/p =计算1000次,用时:<nul&call :etime %aa% %time%
goto :eof
::前面为演示用
:::::::::::::::::::::::::::::::::::::
::浮点加法 call _ADD <被加数> <加数> [返回变量]
:_ADD <num><num> [var] //made by netbenton on 2009.10.09
::
::分别支持十进制的64位整数和小数,一次计算小于0.01秒
:::::::::::::::::::::::::::::::::::::
(setlocal enabledelayedexpansion
set L=&for /l %%a in (1,1,8) do set L=!L!00000000
for /f "tokens=1-3 delims=." %%a in ("!L!%1.!L!") do set at=%%a&set aw=%%b%%c
for /f "tokens=1-3 delims=." %%a in ("!L!%2.!L!") do set bt=%%a&set bw=%%b%%c
set a=!at:~-64!!aw:~,64!
set b=!bt:~-64!!bw:~,64!
set e=
set v=200000000
for /l %%a in (8,8,128)do set/a v=1!b:~-%%a,8!+1!a:~-%%a,8!+!v:~-9,-8!-2&set e=!v:~-8!!e!
set e=!e:0= !
for /f "tokens=*" %%a in ("!e:~,-64!.!e:~64!") do set e=%%~nxa
for %%a in ("!e: =0!") do endlocal&(if %3.==. (echo %%~a) else set %3=%%~a)
exit/b)
::计算时差函数
:etime <begin_time> <end_time> [return] // By plp626 On 09-7-20
setlocal enabledelayedexpansion&set be=%~1;%~2&set be=!be::=;1!&set n=
for %%a in (%be:.=%)do set/a n+=1&set t!n!=%%a
set/a n=((t4-t1)*60+t5-t2)*6000+t6-t3,s=n/100,w=n%%100/10,f=n%%100%%10
endlocal&(if %3.==. (echo %s%.%w%%f%) else set %3=%n:-=%)&exit/b [ Last edited by netbenton on 2009-10-10 at 06:04 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-10-9 22:24 |
|
|
plp626
银牌会员
钻石会员
积分 2278
发帖 1020
注册 2007-11-19
状态 离线
|
『第
34 楼』:
难得高手也对数学计算有兴趣,
那我写个除法的
@echo off
set begin=%time%
call:div 17 %random% 1000
call:etime %begin% %time%
rem 计算1000位 用时0.1秒
exit/b
rem -------------------------------- 子过程 -------------------------------------
:div <dividend> <divisor> <precision> [return] //返回两个除数商的小数部分
Setlocal Enabledelayedexpansion&set/a b=%2,R=%1%%b*10&set "dc="
For /l %%z In (1 1 %3)Do (set/a d=R/b,R=R%%b*10&set dc=!dc!!d!)
endlocal&(if %4.==. (echo %dc%) else set %4=%dc%)&exit/b
:etime <begin_time> <end_time> [return] // 返回 两个时间点的差
setlocal enabledelayedexpansion&set be=%~1;%~2&set be=!be::=000;1!&set c=
(for %%a in (%be:.=%)do set/a c+=1&set t!c!=%%a)&set p=-8640000*("c>>31")
set/a c=(t4-t1)*360+(t5-t2)*6+t6-t3,c+=%p%,s=c/100,w=c%%100/10,f=c%%100%%10
endlocal&(if %3.==. (echo %s%.%w%%f%) else set %3=%c%)&exit/b
|
山外有山,人外有人;低调做人,努力做事。
进入网盘(各种工具)~~ 空间~~cmd学习 |
|
2009-10-9 23:49 |
|
|
k515413928
初级用户
积分 25
发帖 10
注册 2009-4-20
状态 离线
|
『第
35 楼』:
初学批处理 也有楼主的一些想法 希望大家给点建议 下面的东西写了一整天喇
@echo off
setlocal Enabledelayedexpansion
::例如去某文本含有字符0的行并赋值给KK
::得到的值将寄存在KK1~ KK0为数组总个数
call :G_getstrrow 0 a.txt kk
echo %kk1%
echo %kk0%
pause
exit
::1.取文本行中指定的第N行 G_getrowstr 行数 文本 返回寄存变量
::2.取文本的总行数 G_getrows 文本 返回寄存变量
::3.合并多个字符串字符串 G_mergestr 返回寄存变量 字符串1 字符串2 ...
::4.将某字符串插入某文本尾部 G_inserttail 文本 字符串1 字符串2 ...
::5.统计文本长度G_counttxt 文本 返回长度变量
::6.统计变量长度G_countstr 变量 返回长度
::7.取文本出现行G_getstrrow 字符串 文本 寄存 (返回数组总个数保存
在0位)
::7
:G_getstrrow
set G_getstrrowsum=
set G_getstrrowtmp=
set G_getstrrowtmps=
set G_getstrrows=%3
for /f "delims=" %%i in ('findstr "%1" %2') do (
set /a "G_getstrrowsum+=1"
set G_getstrrowtmp=%%i
call :G_mergestr getstrrowtmpa %G_getstrrows% !G_getstrrowsum!
call :G_getstrrow_set !getstrrowtmpa!
)
set %G_getstrrows%0=!G_getstrrowsum!
set G_getstrrows=
set G_getstrrowtmp=
set G_getstrrowtmps=
goto :eof
:G_getstrrow_set
set G_getstrrowtmps=%1
set %G_getstrrowtmps%=!G_getstrrowtmp!
goto :eof
::6
:G_countstr
set G_string=%1
set G_countstr=%2
:G_countstrstart
if not "%G_string%"=="" (
set /a %G_countstr%+=1
set "G_string=%G_string:~1%"
goto G_countstrstart
)
set G_string=
set G_countstr=
goto :eof
::5
:G_counttxt
set G_counttxt=
set G_count=%2
for /f "delims=" %%i in (%1) do set G_counttxt=!G_counttxt!%%i
:G_counttxtstart
if not "%G_counttxt%"=="" (
set /a %G_count%+=1
set "G_counttxt=%G_counttxt:~1%"
goto G_counttxtstart
)
set G_count=
set G_counttxt=
goto :eof
::1
:G_getrowstr
set %3=
for /f "skip=%1 delims=" %%i in (%2) do (
set %3=%%i
goto :eof
)
::2
:G_getrows
set %2=0
for /f %%i in ('findstr /n .* %1') do (
set /a %2=%2+1
)
goto :eof
::3
:G_mergestr
set G_mergestr=%1
:G_getstr
if "%2"=="" goto mergestrend
set G_mergestrs=%G_mergestrs%%2
shift /2
goto G_getstr
:mergestrend
set %G_mergestr%=%G_mergestrs%
set G_mergestrs=
goto :eof
::4
:G_inserttail
set G_inserttailtxt=%1
:getG_inserttail
if "%2"=="" goto G_inserttailend
echo %2 >>%G_inserttailtxt%
shift /2
goto getG_inserttail
:G_inserttailend
set G_inserttailtxt=
goto :eof [ Last edited by k515413928 on 2009-10-19 at 15:42 ]
此帖被 +2 点积分 点击查看详情 评分人:【 jvive 】 | 分数: +2 | 时间:2009-11-5 17:44 |
|
|
|
2009-10-19 15:39 |
|
|
sfcctv
中级用户
积分 208
发帖 135
注册 2009-9-12 来自 离恨天
状态 离线
|
『第
36 楼』:
可惜,批处理不能实现对象的封装。
|
|
2009-11-16 23:09 |
|
|
acaigg
初级用户
积分 115
发帖 92
注册 2010-12-24
状态 离线
|
|
2010-12-28 17:04 |
|