批处理编程的异类——数学(Math)
1、数学——随机
1)随机数发生器:运行后可产生一个00~99的随机整数,并保存于环境变量 %_random% 中。
如果要产生更复杂的随机数,也可以利用这个程序进行修改来得到,比如两次产生的随机数组合,即可得到0000~9999的随机数;在随机数前加上小数点,即可得到0.00-0.99的随机小数;将 prompt _$T$_:: 中的第一个下划线去除,可以得到0~9的随机数;用debug可以去除某些随机数的前缀0。根据以上方法,即可组合得到任意形式的随机数了。
CODE: [Copy to clipboard]
:: GenARnd.Bat - Generate a random integer (00~99) :: Will Sort - 12:06 2005-8-18 - V2 - MSDOS7.10/CMD@WinXP/MSDOS6.22 @echo off echo exit|%comspec% /k prompt _$T$_::> _GenARnd.bat echo e 100 "set _random=">_GenARnd.asd for %%s in (w q) do echo %%s>>_GenARnd.asd debug _GenARnd.bat < _GenARnd.asd > nul call _GenARnd.bat for %%f in (_GenARnd*.*) do del %%f if not "%_random%"=="" if not [%1]==[@] echo Random number : %_random% :End
2)随机阵列发生器:运行后将生成一张随机概率分布矩阵图。
此图24行63列,由字符“-”(假)和“o”(真)组成,从上到下每三行为一组,呈现出o的分布概率依次降低。其中矩阵中的左图为真假序列分布,右图为真假数目对比。
CODE: [Copy to clipboard]
:: RndArray.bat - Generate a serial of random numbers(- or o) :: Will Sort - 2004/11/24 @echo off if "%1"==":" goto %2
set no= set num=0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
:loop set no=I%no% set line= set -= set o= for %%c in (%num%) do call %0 : random %no% echo %line% : %-%%o% set line= set -= set o= for %%c in (%num%) do call %0 : random %no% echo %line% : %-%%o% set line= set -= set o= for %%c in (%num%) do call %0 : random %no% echo %line% : %-%%o% if not [%no%]==[IIIIIIII] goto loop
:quit del _Random.tmp for %%e in (- o no num line) do set %%e= goto end
:random echo. | time > _Random.tmp ::echo exit | %comspec% /k prompt $T>_Random.tmp goto %3
find ".0"<_Random.tmp>nul if not errorlevel 1 goto true :I find ".3"<_Random.tmp>nul if not errorlevel 1 goto true :II find ".6"<_Random.tmp>nul if not errorlevel 1 goto true :III find ".9"<_Random.tmp>nul if not errorlevel 1 goto true :IIII find ".2"<_Random.tmp>nul if not errorlevel 1 goto true :IIIII find ".5"<_Random.tmp>nul if not errorlevel 1 goto true :IIIIII find ".8"<_Random.tmp>nul if not errorlevel 1 goto true :IIIIIII find ".1"<_Random.tmp>nul if not errorlevel 1 goto true :IIIIIIII find ".4"<_Random.tmp>nul if not errorlevel 1 goto true find ".7"<_Random.tmp>nul if not errorlevel 1 goto true ::del _Random.tmp
:false set line=%line%- set -=-%-% goto end
:true set line=%line%o set o=o%o% goto end
:end
2、数学——表达式
1)2K/XP表达式计算批处理,由 Brglng 原创并维护。转帖时精简了程序中的文档部分,可以通过以下链接查阅完整的代码和文档。
{16534}2K/XP表达式计算批处理 http://www./forum/viewthread.php?tid=16534
CODE: [Copy to clipboard]
:: Eval.cmd - 2K/XP表达式计算批处理 :: Brglng - 2005.8.31 @echo off setlocal if /i "%1"=="/A" if "%2"=="" echo 必须指定文件路径!& goto end if /i not "%1"=="/A" if /i not "%1"=="/N" if not "%1"=="" goto EvalArgument
echo 请输入表达式(输入"Q"退出) & goto inputExpr
:EvalArgument set /a EvalExpr="%1" if "%EvalExpr%"=="" echo 表达式输入错误! & goto end echo %1=%EvalExpr% if "%2"=="" goto end echo %1=%EvalExpr% >>"%2" echo 算式和计算结果已存入"%2"! goto end
:inputExpr set Expr= set EvalExpr= set /p Expr=^> if "%Expr%"=="" goto inputExpr if /i "%Expr%"=="Q" goto end set /a EvalExpr="%Expr%" if "%EvalExpr%"=="" echo 输入错误! & goto inputExpr echo 计算结果为:%EvalExpr% if /i "%1"=="/A" goto autosave if /i "%1"=="/N" goto inputExpr
:if_save set SaveEval= set /p SaveEval=是否将表达式和计算结果存入文件[Y/N]? if /i "%SaveEval%"=="Y" goto save if /i "%SaveEval%"=="N" goto inputExpr goto if_save
:save set /p SaveEvalPath=请输入文件路径及文件名(如C:\Windows\file.txt。若只输入文件名则自动存入当前文件夹,留空则为上一次输入的路径): echo "%Expr%"=%EvalExpr% >>"%SaveEvalPath%" echo 表达式以及计算结果已存入"%SaveEvalPath%"! goto inputExpr
:autosave echo "%Expr%"=%EvalExpr% >>"%2" goto inputExpr
:end
|