中国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] »
作者:
标题: 【共同参与】"批处理函数库" 上一主题 | 下一主题
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 16 楼』:  

我觉得用到什么了找别人的来修改来使用,直接用?怕不怎么好使

2008-4-25 13:29
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 17 楼』:  



  Quote:
Originally posted by vkill at 2008-4-25 01:29 PM:
我觉得用到什么了找别人的来修改来使用,直接用?怕不怎么好使

这个zh159兄说过,就是通用性,我开始不以为然,做了许多尝试过后,确有感触。

确实要想完全通用不加修改,有一定困难,这样的代码不是很多,并且当做为通用函数时,代码的效率还会降低,

但是,这只是开始,你如果去老外的论坛,你会对次肯定的。

它即使起不到”函数库的作用“ 它起码提供了个方法库,这对我们引用别人的很方便,新手学习也较集中。



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-25 13:36
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 18 楼』:  

大家能否讨论下下 set做浮点运算的函数
参考论坛里的有关浮点运算的经典帖子(这些请搜索关键字“浮点”),(除数位数多于8位的现在有困难)个人认为完全可以建立一个批处理浮点运算的函数+ - * /,因为set支持位运算,从这点来所,est原先说的计算什么方程的根,倒数了,是可行的,可以好不夸张地说,计算圆周率pi,自然对数e都是可行的,效率当然无法与高级语言相比,但理论上可行。

至于实用性-----没有,这个只当是弥补批处理没有提供浮点运算的现成命令了。
不过很好玩啊。



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-4-25 14:16
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 19 楼』:  批处理乘法函数


@echo off
::Code By cn-dos moniuming 2008-12-31
if "%1"=="" goto :hlp
setlocal enabledelayedexpansion
:bgn
for %%a in (dot ceng fuhao wei answer strax strbx) do (set %%a=)
set "stra=%1"&set "strb=%2"
if "%stra:~,1%"=="+" (set stra=%stra:~1%)
if "%strb:~,1%"=="+" (set strb=%strb:~1%)
if "%stra:~,1%"=="-" (set /a fuhao+=1&set stra=%stra:~1%)
if "%strb:~,1%"=="-" (set /a fuhao+=1&set strb=%strb:~1%)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
  set "stral=%%a"&set "strar=%%b"
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
  set "strbl=%%a"&set "strbr=%%b"
)
:agn1
if defined strar (
  set "strax=%strax%%strar:~-1% "
  set /a "dot+=1","wei+=1"
  if not "%strar:~0,-1%"=="" (
    set "strar=%strar:~0,-1%"&goto :agn1
  )
)
:agn2
if defined strbr (
  set "strbx=%strbx%%strbr:~-1% "
  set /a "dot+=1","wei+=1"
  if not "%strbr:~0,-1%"=="" (
    set "strbr=%strbr:~0,-1%"&goto :agn2
  )
)
:agn3
set "strax=%strax%%stral:~-1% "
set /a "wei+=1"
if not "%stral:~0,-1%"=="" (set "stral=%stral:~0,-1%"&goto :agn3)
:agn4
set "strbx=%strbx%%strbl:~-1% "
set /a "wei+=1"
if not "%strbl:~0,-1%"=="" (set "strbl=%strbl:~0,-1%"&goto :agn4)
for %%a in (%strax%) do (
  set /a "ceng+=1"&set "lie=!ceng!"&set "jinwei=0"
  for %%b in (%strbx%) do (
    set /a "sth=%%a*%%b"
    set "sthl=!sth:~0,-1!"
    set "sthr=!sth:~-1!"
    set /a "var=ans!lie!+!jinwei!+!sthr!"
    set "jinwei=0"
    set "varl=!var:~0,-1!"
    set "varr=!var:~-1!"
    if not "!sthl!"=="" (set /a "jinwei+=!sthl!")
    if not "!varl!"=="" (set /a "jinwei+=!varl!")
    set "ans!lie!=!varr!"
    set /a "lie+=1"
  )
  set "ans!lie!=!jinwei!"
)
for /l %%a in (1 1 %wei%) do (
  set "answer=!ans%%a!!answer!"
  set "ans%%a="
)
if defined dot (
  if not "%4"=="" (
    if "%4"=="0" (
      set "answer=!answer:~0,-%dot%!"
    ) else (
      set "answer=!answer:~0,-%dot%!.!answer:~-%dot%,%4!"
    )
  ) else (
    set "answer=!answer:~0,-%dot%!.!answer:~-%dot%!"
  )
)
:cut
if "%answer:~0,1%"=="0" (
  if not "%answer:~1,1%"=="." (
    set answer=%answer:~1%
    goto :cut
  )
)
if "%fuhao%"=="1" (set answer=-%answer%)
endlocal&set "%3=%answer%"&goto :eof
:hlp
color 3f
echo.&echo  使用方法:
echo.&echo  1.把本批处理脚本命名为 chengfa.bat 复制到系统目录里
echo.&echo  2.不带参数运行本批处理脚本显示此帮助信息
echo.&echo  3.格式: call chengfa.bat 参数1 参数2 参数3 [参数4]
echo.&echo    参数1 为乘数1
echo.&echo    参数2 为乘数2
echo.&echo    参数3 为变量名
echo.&echo    参数4 为保留小数位数,可选参数,如不选则保留所有小数.
echo.&echo  4.例: call chengfa.bat 100 123.456789 ans 2
echo.&echo   意思为给变量 ans 赋值,其值等于 100 和 123.456789 的乘积,
echo.&echo   并保留两位小数,结果为: 12345.67
echo.&set/p= 按任意键退出...<nul&pause>nul&color&goto :eof
[ Last edited by moniuming on 2009-1-19 at 21:17 ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2009-4-13 00:04


2009-1-19 18:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 20 楼』:  批处理加法函数


@echo off
::Code By cn-dos moniuming
if "%1"=="" goto :hlp
setlocal enableextensions
set "jinwei=0"
for %%a in (lastans bu dot) do (set %%a=)
set "stra=%1"
set "strb=%2"
if not "%4"=="" (
  if "%4"=="0" (
    set bu0=1
    set dot=dot
  ) else (
    set bu0=%4
  )
) else (
  set bu0=2
)
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
  set stral=%%a
  set "strar=%%b%bu%"
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
  set strbl=%%a
  set "strbr=%%b%bu%"
)
call set "jiashu1=%stral%%%strar:~0,%bu0%%%"
call set "jiashu2=%strbl%%%strbr:~0,%bu0%%%"
:agn
set /a "var=%jiashu1:~-1%+%jiashu2:~-1%+%jinwei%"
if %var% gtr 9 (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
  set "jiashu1=%jiashu1:~0,-1%"
) else (
  set "jiashu1="
)
if not "%jiashu2:~0,-1%"=="" (
  set "jiashu2=%jiashu2:~0,-1%"
) else (
  set "jiashu2="
)
if defined jiashu1 (
  if defined jiashu2 (
    goto :agn
  ) else (
    call :count1
  )
) else (
  if defined jiashu2 (call :count2)
)
if "%jinwei%"=="0" (set "jinwei=")
call set "cn_ans=%jinwei%%%lastans:~0,-%bu0%%%.%%lastans:~-%bu0%%%"
if defined dot (set cn_ans=%cn_ans:~,-2%)
:cut0
if "%cn_ans:~,1%"=="0" (
  if not "%cn_ans:~1%"=="" (
    if not "%cn_ans:~1,1%"=="." (
      set "cn_ans=%cn_ans:~1%"
      goto :cut0
    )
  )
)
endlocal&set "%3=%cn_ans%"&goto :eof

:count1
set /a "var=%jiashu1:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
  set "jiashu1=%jiashu1:~0,-1%"
  goto :count1
) else (goto :eof)
:count2
set /a "var=%jiashu2:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu2:~0,-1%"=="" (
  set "jiashu2=%jiashu2:~0,-1%"
  goto :count2
) else (goto :eof)
:hlp
color 1f
echo.
echo  声明: 此脚本不支持负数的加法
echo  使用方法:
echo  把本批处理脚本复制到系统目录里
echo  不带参数运行本脚本 显示此帮助信息
echo.
echo  格式: call jiafa.bat 参数1 参数2 参数3 [参数4]
echo    参数1   为加数1
echo    参数2   为加数2
echo    参数3   为变量名
echo    [参数4] 可选参数,为保留小数的位数,如果空则默认保留2位小数
echo.
echo  例: call jiafa.bat 100.78965 123.45 ans 4
echo  意思为给变量 ans 赋值,其值等于100.78965与123.45的和,并保留四位小数
echo  结果为:224.2396
echo.&set/p= 按任意键退出...<nul
pause>nul&color&goto :eof


2009-1-20 19:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 21 楼』:  

嘿嘿,大家有必要讨论一下把函数放在什么地方合适哦
比如说system32  以后可以直接调用,又比如说%userprofile%
可以编一些很有个性的函数,大大地减少鼠标的使用
可能会另外开贴,再议



综合型编程论坛

我的作品索引
  
2009-1-21 10:38
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
WANKOILZ
初级用户





积分 198
发帖 89
注册 2007-9-6
来自 重庆
状态 离线
『第 22 楼』:  

个人觉得“函数库”的通用性不强,“过程库”应该更容易移植,多发点不需要参数的“过程”还不错...

2009-1-21 15:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 23 楼』:  20楼加法函数的修改版

修改的内容为:如果参数4(保留小数位数)为空,则保留原有的小数位数...
@echo off
::Code By cn-dos moniuming 2009-02-08
if "%1"=="" goto :hlp
setlocal enableextensions
set /a jinwei=0,mm=0,mn=0
for %%a in (lastans bu baoliu dot tmp_) do (set %%a=)
set "stra=%1"
set "strb=%2"
if not "%4"=="" (
  if "%4"=="0" (
    set dot=dot
  ) else (
    set baoliu=%4
  )
)
for /f "tokens=1,2 delims=." %%a in ("%stra%") do (
  set stral=%%a
  set strar=%%b
)
for /f "tokens=1,2 delims=." %%a in ("%strb%") do (
  set strbl=%%a
  set strbr=%%b
)
::如果不保留小数则跳过对小数部分的计算
if defined dot (
  set jiashu1=%stral%
  set jiashu2=%strbl%
  goto :agn
)
::如果没有小数则跳过对小数部分的计算
if "%strar%"=="" (
  if "%strbr%"=="" (
    set dot=dot
    set jiashu1=%stral%
    set jiashu2=%strbl%
    goto :agn
  )
)
::计算加数1的小数位数
set "tmp_=%strar%"
:cnt1
if defined tmp_ (
  set /a mm+=1
  set tmp_=%tmp_:~1%
  goto :cnt1
)
set "bu0=%mm%"
set "tmp_="
::计算加数2的小数位数
set "tmp_=%strbr%"
:cnt2
if defined tmp_ (
  set /a mn+=1
  set tmp_=%tmp_:~1%
  goto :cnt2
)
if %mn% gtr %mm% (set bu0=%mn%)
::将两个加数的小数对齐
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
set strar=%strar%%bu%
set strbr=%strbr%%bu%
call set strar=%%strar:~,%bu0%%%
call set strbr=%%strbr:~,%bu0%%%
set "bu="
::如果定义小数位数,则取定义的位数
if defined baoliu (
  for /l %%a in (1 1 %baoliu%) do (call set bu=%%bu%%0)
  call set strar=%strar%%%bu%%
  call set strbr=%strbr%%%bu%%
  call set "jiashu1=%stral%%%strar:~,%baoliu%%%"
  call set "jiashu2=%strbl%%%strbr:~,%baoliu%%%"
) else (
  set jiashu1=%stral%%strar%
  set jiashu2=%strbl%%strbr%
)
::计算
:agn
set /a "var=%jiashu1:~-1%+%jiashu2:~-1%+%jinwei%"
if %var% gtr 9 (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
  set "jiashu1=%jiashu1:~0,-1%"
) else (
  set "jiashu1="
)
if not "%jiashu2:~0,-1%"=="" (
  set "jiashu2=%jiashu2:~0,-1%"
) else (
  set "jiashu2="
)
if defined jiashu1 (
  if defined jiashu2 (
    goto :agn
  ) else (
    call :count
  )
) else (
  if defined jiashu2 (
    set jiashu1=%jiashu2%
    call :count
  )
)
::对小数点进行定位
if not defined dot (
  if defined baoliu (
    call set "cn_ans=%jinwei%%%lastans:~0,-%baoliu%%%.%%lastans:~-%baoliu%%%"
  ) else (
    call set "cn_ans=%jinwei%%%lastans:~,-%bu0%%%.%%lastans:~-%bu0%%%"
  )
) else (
  set cn_ans=%jinwei%%lastans%
)
::对得数进行首位除0的处理
:cut0
if "%cn_ans:~,1%"=="0" (
  if not "%cn_ans:~1%"=="" (
    if not "%cn_ans:~1,1%"=="." (
      set "cn_ans=%cn_ans:~1%"
      goto :cut0
    )
  )
)
endlocal&set "%3=%cn_ans%"&goto :eof

::如果两个加数长度不一样,单独对长出来的部分进行计算
:count
set /a "var=%jiashu1:~-1%+%jinwei%"
if "%var:~0,-1%"=="1" (set jinwei=1) else (set jinwei=0)
set "lastans=%var:~-1%%lastans%"
if not "%jiashu1:~0,-1%"=="" (
  set "jiashu1=%jiashu1:~0,-1%"
  goto :count
)
goto :eof

:hlp
color 1f
echo.
echo  声明: 此脚本不支持负数的加法
echo.
echo  使用方法:
echo  把本批处理脚本复制到系统目录里
echo  不带参数运行本脚本 显示此帮助信息
echo.
echo  格式: call jiafa.bat 参数1 参数2 参数3 [参数4]
echo     参数1    为加数1
echo     参数2    为加数2
echo     参数3    为变量名
echo     [参数4]  可选参数,为保留小数的位数,如果空则保留原有小数
echo.
echo  例: call jiafa.bat 100.78965 123.45 ans 4
echo  意思为给变量 ans 赋值,其值等于100.78965与123.45的和,并保留四位小数
echo  结果为:224.2396
echo.&set/p= 按任意键退出...<nul
pause>nul&color&goto :eof


   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2009-4-13 00:04


2009-2-9 10:15
查看资料  发短消息 网志   编辑帖子  回复  引用回复
moniuming
银牌会员

永远的菜鸟



积分 1335
发帖 574
注册 2007-11-27
来自 广西
状态 离线
『第 24 楼』:  减法函数


@echo off
rem Code By cn-dos moniuming 2009-02-09
if "%1"=="" goto :hlp
setlocal enableextensions
for %%a in (jie mm mn tm) do (set %%a=0)
for %%a in (baoliu fu last_ans m n no tmp_) do (set %%a=)
set beij=%1
set jian=%2
rem 把被减数首位除0
:cut1
if "%beij:~,1%"=="0" (
  if not "%beij:~1%"=="" (
    if not "%beij:~1,1%"=="." (
      set beij=%beij:~1%
      goto :cut1
)))
rem 把减数首位除0
:cut2
if "%jian:~,1%"=="0" (
  if not "%jian:~1%"=="" (
    if not "%jian:~1,1%"=="." (
      set jian=%jian:~1%
      goto :cut2
)))
rem 判断保留小数的位数
if not "%4"=="" (
  if "%4"=="0" (
    set no=no
  ) else (
    set baoliu=%4
  )
)
rem 把被减数和减数分为整数和小数两个部分
for /f "tokens=1,2 delims=." %%a in ("%beij%") do (
  set "stral=%%a"&set "strar=%%b"
)
for /f "tokens=1,2 delims=." %%a in ("%jian%") do (
  set "strbl=%%a"&set "strbr=%%b"
)
rem 如果不保留小数,则跳过对小数部分的计算
if defined no (
  set stra=%stral%
  set strb=%strbl%
  goto :agn1
)
rem 如果没有小数,则跳过对小数部分的计算
if "%strar%"=="" (
  if "%strbr%"=="" (
    set no=no
    set stra=%stral%
    set strb=%strbl%
    goto :agn1
  )
)
rem 计算被减数小数部分的位数
set "tmp_=%strar%"
:cnt1
if defined tmp_ (
  set /a mm+=1
  set tmp_=%tmp_:~1%
  goto :cnt1
)
set "bu0=%mm%"
rem 计算减数小数部分的位数
set "tmp_=%strbr%"
:cnt2
if defined tmp_ (
  set /a mn+=1
  set tmp_=%tmp_:~1%
  goto :cnt2
)
if %mn% gtr %mm% set bu0=%mn%
rem 将两个减数的小数部分对齐
for /l %%a in (1 1 %bu0%) do (call set bu=%%bu%%0)
set strar=%strar%%bu%
set strbr=%strbr%%bu%
call set strar=%%strar:~,%bu0%%%
call set strbr=%%strbr:~,%bu0%%%
set "bu="
rem 如果定义小数位数,则取定义的位数
if defined baoliu (
  for /l %%a in (1 1 %baoliu%) do (call set bu=%%bu%%0)
  call set strar=%strar%%%bu%%
  call set strbr=%strbr%%%bu%%
  call set stra=%stral%%%strar:~,%baoliu%%%
  call set strb=%strbl%%%strbr:~,%baoliu%%%
) else (
  set stra=%stral%%strar%
  set strb=%strbl%%strbr%
)
rem 计算被减数整数部分的位数
:agn1
set /a m+=1
if not "%stral:~1%"=="" (set stral=%stral:~1%&goto :agn1)
rem 计算减数整数部分的位数
:agn2
set /a n+=1
if not "%strbl:~1%"=="" (set strbl=%strbl:~1%&goto :agn2)
rem 判断正负
if %n% gtr %m% (
  set fu=fu
  set "beijshu=%strb%"
  set "jianshu=%stra%"
) else (
  if "%n%"=="%m%" (
    set tmp1=%stra%
    set tmp2=%strb%
    goto :pk
  ) else (
    set "beijshu=%stra%"
    set "jianshu=%strb%"
  )
)
rem 计算
:agn
set /a sth=%beijshu:~-1%-%jianshu:~-1%-%jie%
if %sth% lss 0 (
  set jie=1
  set /a sth+=10
) else (
  set jie=0
)
set last_ans=%sth%%last_ans%
if not "%beijshu:~,-1%"=="" (
  if not "%jianshu:~,-1%"=="" (
    set "beijshu=%beijshu:~,-1%"&set "jianshu=%jianshu:~,-1%"&goto :agn
  ) else (
    set "beijshu=%beijshu:~,-1%"&set "jianshu=0"&goto :agn
  )
)
rem 不保留小数的除0以及正负数处理
:cut0
if defined no (
  if not "%last_ans:~,1%"=="0" (
    if not defined fu (
      endlocal&set %3=%last_ans%&goto :eof
    ) else (
      endlocal&set %3=-%last_ans%&goto :eof
      )
  ) else (
    set last_ans=%last_ans:~1%
    goto :cut0
  )
)
rem 对小数点进行定位
if defined baoliu (
  call set last_ans=%%last_ans:~,-%baoliu%%%.%%last_ans:~-%baoliu%%%
) else (
  if bu0 gtr 0 (
    call set last_ans=%%last_ans:~,-%bu0%%%.%%last_ans:~-%bu0%%%
  )
)
rem 首位除0处理
:cut_
if "%last_ans:~,1%"=="0" (
  if not "%last_ans:~1,1%"=="." (
    set last_ans=%last_ans:~1%
    goto :cut_
  )
)
rem 正负处理
if defined fu (
  set last_ans=-%last_ans%
) else (
  set last_ans=%last_ans%
)
rem 退出脚本
endlocal&set %3=%last_ans%&goto :eof
rem 判断相同位数的大小
:pk
if %tmp1:~,1% gtr %tmp2:~,1% (
  set beijshu=%stra%
  set jianshu=%strb%
  goto :agn
) else (
  if %tmp2:~,1% gtr %tmp1:~,1% (
    set fu=fu
    set beijshu=%strb%
    set jianshu=%stra%
    goto :agn
  ) else (
    if not "%tmp1:~1%"=="" (
      set tmp1=%tmp1:~1%
      set tmp2=%tmp2:~1%
      goto :pk
    ) else (
      endlocal&set %3=0&goto :eof
    )
  )
)
:hlp
color 1f
echo.&echo  使用方法:
echo.&echo  1.把本批处理脚本命名为 jianfa.bat 复制到系统目录里
echo.&echo  2.不带参数运行本批处理脚本显示此帮助信息
echo.&echo  3.格式: call jianfa.bat 参数1 参数2 参数3 [参数4]
echo.&echo    参数1     为被减数
echo.&echo    参数2     为减数
echo.&echo    参数3     为变量名
echo.&echo    [参数4]   可选参数,为保留小数位数,如不选则保留原有小数.
echo.&echo  4.例: call jianfa.bat 100 123.456789 ans 2
echo.&echo    意思为给变量 ans 赋值,其值等于 100 减去 123.456789 的差,
echo.&echo    并保留两位小数,结果为: -23.45
echo.&set/p=   按任意键退出...<nul&pause>nul&color&goto :eof


2009-2-9 16:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 25 楼』:  

直接调用实用性不是很强,效率太低,
但是把各种功能存在库目录,以文件名简单说明用途,
并且文件内都有说明如何用,用在何处,和注意问题。
到用到时,再贴到BAT里,还是很好的,
毕竟一般人记不得那么多的代码,就算懂得,敲进来也费时。

我贴一个:
@echo off
goto :begin
f 100 l14 B8 00 B8 50 1F BF 00 02 B9 D0 07 BD 02 08 BA 50 00 AD 3C 20
f 114 l14 75 03 43 75 02 31 DB AA 4A 75 0D B8 0D 0A 29 DF 29 DD 31 DB
f 128 l0e AB BA 50 00 E2 E3 06 1F 89 E9 31 DB 90 90
t=100
g 134
w 200
q
:begin
if '%1'=='' set of=abcec.txt
debug %1%of%<%~f0>nul
start notepad %1%of%
goto :eof
::DOS下保存整个屏幕内容到文件,不支持中文(即图型模式)
::在图型模式将输出一个只有空行的文件
::用debug 取显示缓存区内容。输出%1指定的文件,
::如果%1为空,输出到abcec.txt
::用在程序输出有进度显示时,得到的最终屏幕信息


::注意:本函数调用必独立存为一个BAT文件调用,不可以放在BAT程序内作子程序。
::行 start notepad %1%of% 用作测试显示结果,用时可删除

[ Last edited by netbenton on 2009-4-12 at 23:08 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-2-9 19:17
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 26 楼』:  

纵使我们的“过程代码”效率很低,幼稚也罢;但这是大家学习提高的一个平台,只要坚持,总会越来越精简,越来越高效,重复的工作必然会越来越少



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2009-4-13 00:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 27 楼』:  那好,我也来个加法的。


@echo off
set aa=%1
set bb=%2

::调用浮点加法函数
echo %time%
call :add cc aa bb
echo %time%

echo %cc%
goto :eof

:::::::::::::::::::::::::::::::
::浮点加法函数
:add <接收变量> <被加数变量> <加数变量>
::
::
::支持49位整数,49小数
::自动丢弃首尾无效0
::别看代码那么长,速度可不慢哦
:::::::::::::::::::::::::::::::

@echo off&setlocal enabledelayedexpansion
set za=!%2:*.=!
set xa=!%2:.%za%=!
set zb=!%3:*.=!
set xb=!%3:.%zb%=!
if "!zb!."=="!%3!." set zb=0
if "!za!."=="!%2!." set za=0
set za=%za%0
set zb=%zb%0
set zm=0
for /l %%a in (0,9,81) do (
        if "!za:~%%a,9!!zb:~%%a,9!"=="" goto :xok
        set "za%%a=!za:~%%a,9!000000000"
        set "zb%%a=!zb:~%%a,9!000000000"
        set za%%a=1!za%%a:~0,9!
        set zb%%a=1!zb%%a:~0,9!
        set zm=%%a
)
:xok
set zy=0
for /l %%a in (%zm%,-9,0) do (
        set/a "zz=!zy:~0,-9!+za%%a-1000000000+zb%%a-1000000000"
        set zy=000000000!zz!
        set zx=!zy:~-9!!zx!
)
set/a zm+=9,n=zm
for /l %%a in (1,1,%zm%) do if "!zx:~-%%a,1!"=="0" (set n=-%%a) else (goto :cok)
:cok
if "!zx:~-%zm%,%n%!" gtr "0" (set cc=.!zx:~-%zm%,%n%!) else (set cc=)

set zy=
for /l %%a in (9,9,81) do (
        if "!xa!!xb!"=="" goto :end
        set cc=!zy!!cc!
if defined xa (set "aa=000000000!xa:~-9!"&set xa=!xa:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
        set/a zz=!zz:~0,-9!+1!bb:~-9!-1000000000+1!aa:~-9!-1000000000
        set zy=000000000!zz!
        set zy=!zy:~-9!
)
:end
set cc=%zz%%cc%
if "%cc%"=="0" goto :endok
if "%cc:~0,2%"=="0." goto :endok
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :endok)
:endok
endlocal&set cc=%cc%&goto :eof
[ Last edited by netbenton on 2009-4-12 at 23:07 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-13 01:00
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 28 楼』:  减法


@echo off&setlocal enabledelayedexpansion
set a=%1
set b=%2
echo %time%
call :sub c a b
echo %time%

echo %c%
goto :eof

:::::::::::::::::::::::::::::::
::浮点减法函数
:sub <接收变量> <被减数变量> <减数变量>
::
::
::支持49位整数,49小数
::自动丢弃首尾无效0
::别看代码那么长,速度可不慢哦
:::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
set cc=0
set za=!%2:*.=!
set xa=!%2:.%za%=!
set zb=!%3:*.=!
set xb=!%3:.%zb%=!
if "!zb!."=="!%3!." set zb=0
if "!za!."=="!%2!." set za=0
set za=%za%0
set zb=%zb%0
::补0对齐
for /l %%a in (0,9,81) do (
if "!xa!!xb!"=="" set n=%%a&goto :bu0
if defined xa (set ya=!xa:~-9!!ya!&set xa=!xa:~0,-9!) else (set ya=000000000!ya!)
if defined xb (set yb=!xb:~-9!!yb!&set xb=!xb:~0,-9!) else (set yb=000000000!yb!)
)
:bu0
set ya=0000000000%ya%
set yb=0000000000%yb%
set xa=!ya:~-%n%!
set xb=!yb:~-%n%!
if "%xa%%za%" gtr "%xb%%zb%" (
        set zz=!za!&set xx=!xa!&set fh=
) else (
        set zz=!zb!&set xx=!xb!&set zb=!za!&set xb=!xa!&set fh=-
)

::预处理完成

for /l %%a in (0,9,81) do (
        if "!zz:~%%a,9!!zb:~%%a,9!"=="" goto :xok
        set "zz%%a=!zz:~%%a,9!000000000"
        set "zb%%a=!zb:~%%a,9!000000000"
        set zz%%a=1!zz%%a:~0,9!
        set zb%%a=1!zb%%a:~0,9!
        set zm=%%a
)
:xok
set jw=0
for /l %%a in (%zm%,-9,0) do (
        set/a "zz=jw+zz%%a-zb%%a"
        if !zz! lss 0 (set/a zz=1000000000+zz&set jw=-1) else (set jw=0)
        set zy=000000000!zz!
        set zx=!zy:~-9!!zx!
)
set/a zm+=9,n=zm
for /l %%a in (1,1,%zm%) do if "!zx:~-%%a,1!"=="0" (set n=-%%a) else (goto :cok)
:cok
if "!zx:~-%zm%,%n%!" gtr "0" (set cc=.!zx:~-%zm%,%n%!) else (set cc=)
set zy=
for /l %%a in (9,9,81) do (
        if "!xx!!xb!"=="" goto :end
        set cc=!zy!!cc!
if defined xx (set "aa=000000000!xx:~-9!"&set xx=!xx:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
        set/a zz=jw+1!aa:~-9!-1!bb:~-9!
        if !zz! lss 0 (set/a zz=1000000000+zz&set jw=-1) else (set jw=0)
        set zy=000000000!zz!
        set zy=!zy:~-9!
)
:end
set cc=%zz%%cc%
if "%cc%"=="0" goto :endok
if "%cc:~0,2%"=="0." goto :endok
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :endok)
:endok

endlocal&set %1=%fh%%cc%&goto :eof
[ Last edited by netbenton on 2009-4-12 at 23:07 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-13 01:01
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 29 楼』:  乘法


@echo off
set aa=%1
set bb=%2

::调用浮点乘法函数
echo %time%
call :mul cc aa bb %3
echo %time%

echo %cc%
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::
:mul <接收变量名> <被乘数> <乘数> [指定保留小数位]
::
::浮点乘法函数,头尾都可带0,支持乘积为:49位整数,49位小数。
::第一个参数为接收变量名,第二、三个为相乘数变量名,第四个批定要保留小数位数
::最大位数计算仅需12毫秒
::别看代码那么长,速度可不慢
::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
set cc=0
set ka=!%2:*.=!
set kb=!%3:*.=!

set maa=!%2:.=!
set mb=!%3:.=!

for /l %%a in (0,1,49) do if not "!maa:~%%a,1!"=="0" (set maa=!maa:~%%a!&goto :maaok)
:maaok

for /l %%a in (0,1,49) do if not "!mb:~%%a,1!"=="0" (set mb=!mb:~%%a!&goto :mbok)
:mbok

if "!kb!."=="!%3!." set kb=
if "!ka!."=="!%2!." set ka=
set kab=!kb!!ka!#
for /l %%a in (0,1,49) do if "!kab:~%%a,1!"=="#" (set kab=%%a&goto :lp1)
set mz=
:lp1
if defined mb (set al=!mb:~-4!
if "!al:~0,1!"=="0" set/a al=1!al!-10000
set mb=!mb:~0,-4!
) else (goto :endmul)
set ma=!maa!
set "cl= "
for /l %%a in (1,4,91) do (
        if not defined ma (goto :end1)
        set bl=!ma:~-4!
        if "!bl:~0,1!"=="0" set/a bl=1!bl!-10000
        set/a bl=!cl:~0,-%%a!+bl*al
        set ma=!ma:~0,-4!
        set cl=0000!cl:~-%%a!
        set cl=!bl!!cl:~-%%a!
)
:end1
set cl=%cl:~0,-1%%mz%
set mz=!mz!0000

set xa=%cc%
set xb=%cl%
set cc=
set zz=0
set zy=
for /l %%a in (9,9,81) do (
        if "!xa!!xb!"=="" goto :end2
        set cc=!zy!!cc!
if defined xa (set "aa=000000000!xa:~-9!"&set xa=!xa:~0,-9!) else (set aa=000000000)
if defined xb (set "bb=000000000!xb:~-9!"&set xb=!xb:~0,-9!) else (set bb=000000000)
        set/a zz=!zz:~0,-9!+1!bb:~-9!-1000000000+1!aa:~-9!-1000000000
        set zy=000000000!zz!
        set zy=!zy:~-9!
)
:end2
set cc=%zz%%cc%
if not %cc% gtr 0 goto :lp1
for /l %%a in (0,1,36) do if not "!cc:~%%a,1!"=="0" (set cc=!cc:~%%a!&goto :lp1)
goto :lp1

:endmul
if not %kab%==0 (
set ka=00000000000000000000000000000000000000000000000000%cc%
if "!cc:~0,-%kab%!"=="" (set cc=0.!ka:~-%kab%,%4!) else (set cc=!cc:~0,-%kab%!.!cc:~-%kab%,%4!)
)
endlocal&set %1=%cc%&goto :eof


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




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-4-13 01:07
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 30 楼』:  

看来大家都对论坛还是热爱,这长的代码得花些时间,

现在讨论制定个规范,方便他人阅读

:标签 // 注释 [参数1] [参数2] ...
干什么用的,参数的要求,等等,有个大致的格式



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2009-4-13 07:03
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: