中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【共同参与】"批处理函数库"
« [1] [2] [3] »
作者:
标题: 【共同参与】"批处理函数库" 上一主题 | 下一主题
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 ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2009-10-9 23:32




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-10-9 22:24
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
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
状态 离线
『第 37 楼』:  

强烈支持,但我很菜。

2010-12-28 17:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: