批处理计算器.docx

上传人:b****2 文档编号:23475519 上传时间:2023-05-17 格式:DOCX 页数:18 大小:20.80KB
下载 相关 举报
批处理计算器.docx_第1页
第1页 / 共18页
批处理计算器.docx_第2页
第2页 / 共18页
批处理计算器.docx_第3页
第3页 / 共18页
批处理计算器.docx_第4页
第4页 / 共18页
批处理计算器.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

批处理计算器.docx

《批处理计算器.docx》由会员分享,可在线阅读,更多相关《批处理计算器.docx(18页珍藏版)》请在冰豆网上搜索。

批处理计算器.docx

批处理计算器

复制时要把代码最下方的“智能批处理计算器使用说明”一起复制到代码中。

否则会影响代码运行。

@echooff&setjiluk=&set/ajilu=0,xsljjg=0,xiaosu=10

title%~n0智能计算器2by随风@@2009-02-22

setsangcijg=&set"pi=3.1415926535897932384626433832795"

setlocalenabledelayedexpansion&set"lin=00000"

for/l%%ain(115)doset"lin=!

lin!

!

lin!

!

lin!

"

:

kaisi

setyyd=&colorcf

echo.&echo.欢迎使用智能批处理计算器

echo.&echo.&echo.首次使用请先仔细阅读使用说明

echo.&echo.本代码源自《批处理之家论坛》

echo.&echo.使用中若发现bug请去该处反馈、谢谢^^!

^^!

^^!

echo.&echo.&echo.&echo.重要声明:

echo.&echo.本代码为bat批处理业余爱好者编写

echo.&echo.可任意转载、使用、但若因此导致的任何错误、损失、本人概不负责。

echo.&echo.&echo.

echo.请选择:

1阅读使用说明2进入对文本操作界面3进入手动界面

:

kaisi2

echo.&setxuanze=&set/pxuanze=&cls

if"%xuanze%"=="3"color1f&gotostart0

ifnotdefinedxuanzecolor1f&gotostart0

ifdefinedyydif"!

xuanze!

"=="1"cls&gotokaisi

if"%xuanze%"=="1"(

call:

ydsuom"%~0"

setyyd=a&echo.&echo.

echo.请选择:

1返回首页2进入对文本操作界面3进入手动界面

gotokaisi2

ifnot"%xuanze%"=="2"cls&gotokaisi

:

wbjm文本界面

cls&color1f

echo.&echo.直接回车返回首页。

echo.&echo.按3进入手动输入算式界面。

echo.&echo.请输入文件名全名及全路径,或拖放文件来此。

echo.&setwenben=&set/pwenben=&cls&setbaocun=temp.txt

if"!

wenben!

"=="3"cls&gotostart0

ifnotdefinedwenbencls&gotokaisi

set"wenben=%wenben:

"=%"

ifnotexist"%wenben%"echo文件不存在。

&ping/n3127.0>nul&gotowbjm

echo.&echo.正在计算%wenben:

"=%中的算式,结果保存在%baocun%中

echo.&echo.请稍候。

&echo.

setlocal&cd.>"%baocun%"

for/f"usebackqdelims="%%ain("%wenben%")do(

call:

start0"%%a"okk

>>"%baocun%"echo!

okk!

start"""%baocun%"

exit

:

start0

setlocal

if"!

wenben!

"=="3"set"wenben="

ifdefinedwenbensetsuru=%~1&gotowenben

echo.&echo.累计储存结果:

%xsljjg%

echo.&echo.%sangcijg%

echo.&echo.&echo.&echo.输入bz查看帮助

echo.&echo.请输入算式如:

-7+{2+[1+(3+-2*0.5--2*2+3)]+[3*(9--8*2)]*5/2}--2+5=

echo.&set"suru="&set/psuru=&cls

if"!

suru!

"=="bz"(

call:

ydsuom"%~0"

echo.&echo.按任意键返回。

&pause>nul&cls&color1f

endlocal&setxsljjg=%jilu%&gotostart0

ifnotdefinedsuruendlocal&cls&setxsljjg=%jilu%&gotostart0

set"suru=%suru:

=%"

if"!

suru:

~-1!

"=="+"setjiluk=a&set"bq=+"

if"!

suru:

~-1!

"=="-"setjiluk=a&set"bq=-"

if"!

suru:

~-1!

"=="*"setjiluk=a&set"bq=*"

if"!

suru:

~-1!

"=="/"setjiluk=a&set"bq=/"

if"!

suru:

~-1!

"=="."setjiluk=a&setjilu=0&set"bq=+"

ifdefinedjiluksetsuru=!

suru:

~0,-1!

:

wenben

set"suru=%suru:

=%"

if"!

suru:

~0,1!

"=="."set"suru=0!

suru!

"

for%%ain(c+-/^([{)doset"suru=!

suru:

%%a.=%%a0.!

"

if"%suru:

~-1%"=="="set"suru=%suru:

~0,-1%"

echo.&echo.正在计算:

%suru%=

setxsjg=%suru%=

:

:

:

从这里开始

set"ok="

if"%suru:

~0,1%"=="-"set"suru=f%suru:

~1%"

call:

lis1"%suru%"ok

set"ok=!

Ok:

~1!

"

for%%ain(c+-/^([{)doset"ok=!

ok:

%%a-=%%af!

"

for/l%%ain(019)do(

setok=!

ok:

%%a^(=%%ac^(!

setok=!

ok:

^)%%a=^)c%%a!

set"ok=!

ok:

%%a[=%%ac[!

"

set"ok=!

ok:

]%%a=]c%%a!

"

set"ok=!

ok:

%%a{=%%ac{!

"

set"ok=!

ok:

}%%a=}c%%a!

"

set"ok=!

ok:

pi=%pi%!

"

set"ok=0+!

ok!

+0"

call:

cif"!

ok!

"ok

for%%gin("()""[]""{}")do(

set"kuoh=%%~g"

call:

lisxh"!

ok!

"ok

call:

liscc"!

ok!

"ok

call:

lisjj"!

ok!

"ok

setok=!

ok:

f=-!

:

:

完成计算

setlecs=&set"cucw="

ifdefinedjiluk(

set"okok=!

ok!

"

set"leiji=!

okok!

!

bq!

!

jilu!

"

if"!

bq!

"=="/"if"!

jilu!

"=="0"(

setbq=*&set/aokok=1

set"leiji=0+!

jilu!

"

setlecs=以零为除数的错误。

累计储存结果不变。

if"!

ok!

"=="以零为除数的错误。

"(

setlecs=以零为除数的错误。

累计储存结果不变。

set"leiji=0+!

jilu!

"

setbq=+&set/aokok=0

call:

start"^(!

okok!

^)!

bq!

^(!

jilu!

^)"jilu

ifdefinedwenbenendlocal&set%~2=%xsjg%%ok%&goto:

EOF

cls&setxsljjg=!

jilu!

!

lecs!

setsangcijg=!

xsjg!

!

ok!

!

cucw!

ifdefinedjiluk(

endlocal&setjilu=%jilu%&set"xsljjg=%xsljjg%"&set"sangcijg=%sangcijg%"

)elseendlocal&set"sangcijg=%sangcijg%"

gotostart0

goto:

EOF

:

lisxh处理各种()[]{}括弧

for/f"tokens=1,2*delims=%kuoh%"%%ain("%~1")do(

if"%%b"==""set%~2=!

ok!

&goto:

EOF

call:

liscc"%%b"ok

call:

lisjj"!

ok!

"ok

set"ok=!

ok:

-=f!

"

set"ok=%%a!

ok!

%%c"

call:

lisxh"!

ok!

"ok

goto:

EOF

:

liscc计算连续乘除

setph=%~1&setq=&seth=&setaa=&setn=0

setph=!

ph:

c=c#!

&setph=!

ph:

/=/@!

setph=!

ph:

+=+!

&setph=!

ph:

-=-!

for/f"tokens=1*delims=c/"%%ain("!

ph!

")do(

if"%%b"==""set%~2=!

ph:

=!

&goto:

EOF

for%%iin(%%a)dosetq=!

q!

!

aa!

&set"aa=%%i"

for%%iin(%%b)doset/an+=1&set"m!

n!

=%%i"

for/l%%iin(31!

n!

)doseth=!

h!

!

m%%i!

if"!

m1!

"=="#"(setm1=*)elseset"m1=/"

set"js=^(!

aa:

f=-!

^)!

m1!

^(!

m2:

f=-!

^)"

ifnot"!

h!

"==""seth=!

h:

c#=c!

&set"h=!

h:

/@=/!

"

call:

start"!

js!

"ph

if"!

ph!

"=="以零为除数的错误。

"setq=&set"h="

set"ph=!

ph:

-=f!

"

set"ph=!

q!

!

ph:

-=f!

!

h!

"

set"ph=!

ph:

/@=/!

"

call:

liscc"!

ph!

"ph

set"%~2=!

ph:

=!

"

goto:

EOF

:

lisjj计算连续加减

sethe=&setjs=%~1

setjs=!

js:

+=+!

&setjs=!

js:

-=-!

for%%ain(!

js!

)do(

set"b=%%a"

ifdefinedhe(

setjs=^(!

he!

^)!

b:

~0,1!

^(!

b:

~1!

^)

setjs=!

js:

f=-!

call:

start!

js!

he

)elseset"he=%%a"

set"%~2=!

he:

-=f!

"

goto:

EOF

:

lis1将*号替换为c方便代码运行

for/f"tokens=1*delims=*"%%ain("%~1")do(

set"ok=!

ok!

c%%a"

call:

lis1"%%b"ok

if"%%b"==""goto:

EOF

set"%~2=%ok%"

goto:

eof

:

cif处理次方

setaaa=&setbbb=&setaa=&setbb=&setn=0

for/f"tokens=1*delims=x"%%ain("%~1")do(

if"%%b"==""set%~2=!

ok!

&goto:

EOF

seta=%%a&set"b=%%b"

seta=!

a:

^(=^(!

&seta=!

a:

+=+!

&seta=!

a:

-=-!

seta=!

a:

c=c!

&seta=!

a:

/=/!

for%%iin(!

a!

)dosetaaa=!

aaa!

!

aa!

&setaa=%%i

setb=!

b:

^)=^)!

&setb=!

b:

+=+!

&setb=!

b:

-=-!

setb=!

b:

c=c!

&setb=!

b:

/=/!

for%%iin(!

b!

)doset/an+=1&setl!

n!

=%%i

setbb=!

l1!

&set"ok="

for/l%%iin(21!

n!

)dosetbbb=!

bbb!

!

l%%i!

for/l%%iin(11!

bb!

)dosetok=!

ok!

c!

aa!

set"ok=!

ok:

~1!

"

if"!

bb!

"=="0"set"ok=1c1"

if"!

bb!

"=="1"set"ok=!

aa!

c1"

call:

liscc"!

ok!

"ok

setok=!

aaa!

!

ok!

!

bbb!

call:

cif"!

ok!

"ok

set%~2=!

ok!

goto:

EOF

:

start计算单一算式

setlocal

set"suru=%~1"

setyunsuanf=&setf=&set"ff="&setxs1=&set"xs2="

set"suru=%suru:

=%"

if"%suru:

~-1%"=="="set"suru=%suru:

~0,-1%"

if"%suru:

~0,1%"=="("setsuru=%suru:

~1%&set"xs1=("

if"%suru:

~0,1%"=="-"(setyf=-)elseset"yf="

for/f"tokens=1*delims=+-*/"%%ain("%suru%")do(

setnum=%yf%%%a&set"str=%%b"

(setstr=!

str:

^(=!

&setstr=!

str:

^)=!

(setnum=!

num:

^)=!

set"ysf=!

suru:

*%num%=!

"

if"%ysf:

~0,1%"==")"set"ysf=%ysf:

~1%"

set"ysf=!

ysf:

~0,1!

"

ifnotdefinedxs1(set"xs1=!

num!

")elseset"xs1=!

xs1!

!

num!

)"

set"xsysf=%ysf%"

if"!

str:

~0,1!

"=="-"(set"xs2=(!

str!

)")elseset"xs2=!

str!

"

set"xsss=!

xs1!

!

xsysf!

!

xs2!

"

if"!

num:

~0,1!

"=="-"(

if"!

str:

~0,1!

"=="-"(setff=)elseset"ff=-"

)elseif"!

str:

~0,1!

"=="-"set"ff=-"

if"!

ysf!

"=="+"(

set"yunsuanf=jia"&set"ff="

if"!

num:

~0,1!

"=="-"(

set"ff=-"

ifnot"!

str:

~0,1!

"=="-"set"yunsuanf=jian"

)elseif"!

str:

~0,1!

"=="-"set"yunsuanf=jian"

if"!

ysf!

"=="-"(

set"yunsuanf=jian"&set"ff="

if"!

num:

~0,1!

"=="-"(

set"ff=-"&set"yunsuanf=jia"

if"!

str:

~0,1!

"=="-"set"yunsuanf=jian"

)else(if"!

str:

~0,1!

"=="-"setyunsuanf=jia)

if"!

ysf!

"=="*"set"yunsuanf=cen"

if"!

ysf!

"=="/"(set"yunsuanf=cu0")

setnum=!

num:

-=!

&set"str=!

str:

-=!

"

set/anumxw=0,strxw=0,xzw=0,xc=0,duo=0

call:

pdxs%num%numznumxnumxw

call:

pdxs%str%strzstrxstrxw

if%numxw%geq%strxw%(set/aduo=numxw)elseset/aduo=strxw

set/axzw=numxw+strxw,xc=numxw-strxw&set"xc=!

xc:

-=!

"

if!

duo!

neq0(

set"numx=!

numx:

~0,%duo%!

"&set"strx=!

strx:

~0,%duo%!

"

)elseset"numx="&set"strx="

:

:

echo第一个数整数%numz%小数%numx%小数的位数%numxw%位

:

:

echo第一个数整数%strz%小数%strx%小数的位数%strxw%位

set"she=%numz%%numx%%strz%%strx%"

if"!

ysf!

"=="*"set/aduo=xzw&set"she=%num:

.=%%str:

.=%"

call:

%yunsuanf%%she%ok

if"!

ysf!

"=="/"gotook

gotoxs

:

pdxs给小数补0、获取小数位数。

setlocal&set/az=0

set"var=%~1"

if"!

var:

~0,1!

"=="."set"var=0!

var!

"

for/f"tokens=1*delims=."%%ain("!

var!

")do(set"str1=%%a"

if"%%b"==""(setstr2=!

lin!

&setz=0)else(

set"str2=%%b"

for/l%%iin(019)doset"str2=!

str2:

%%i=%%i!

"

for%%iin(!

str2!

)doset/az+=1

set"str2=!

str2:

=!

"&set"str2=%%b!

lin!

"

))

Endlocal&set%~2=%str1%&set%~3=%str2%&set"%~4=%z%"&goto:

EOF

:

xs处理最终结果

if"%ok:

-=%"=="0"gotook

set"ok=!

ff!

!

ok!

"&set"lin="

if"!

ok:

~0,1!

"=="-"(

if"!

ok:

~1,1!

"=="-"(set"f=")elseset"f=-"

)elseset"f="

set"ok=!

ok:

-=!

"

if!

duo!

equ0(gotook)else(

set"ok=!

lin!

!

ok!

"

set"ok=!

ok:

~0,-%duo%!

.!

ok:

~-%duo%,%duo%!

"

:

loop

if"!

ok:

~-1!

"=="0"setok=!

ok:

~0,-1!

&gotoloop

for/f"tokens=*delims=0"%%ain("%ok%")do(

if"%%a"==""(setok=0&gotook)elseset"ok=%%a"

if"!

ok!

"=="."setok=0&gotook

if"!

ok:

~0,1!

"=="."set"ok=0!

ok!

"

if"!

ok:

~-1!

"=="."set"ok=!

ok:

~0,-1!

"

:

ok

endlocal&set%~2=%f%%ok%&goto:

EOF

:

jia加法函数(封装)by@随风@

:

:

计算任意位数的正整数加法

setlocalenabledelayedexpansion&setf=&set"t="

setvar1=%~1&setvar2=%~2&set/aj=0,n1=0,n2=0

for/l%%ain(019)do(setvard1=&set"vard2="

setvar1=!

var1:

%%a=%%a!

&setvar2=!

var2:

%%a=%%a!

for%%ain(!

var1!

)do(set/an1+=1&setvard1=%%a!

vard1!

for%%ain(!

var2!

)do(set/an2+=1&setvard2=%%a!

vard2!

(if!

n1!

lss!

n2!

(setvar1=%var2%&set"var2=%var1%"

setvard1=%vard2%&setvard2=%vard1%))&set"var2=!

var2:

=!

"

for%%ain(!

vard1!

)do(if"!

var2!

"==""set/avar2=0

set/aa=%%a+!

var2:

~-1!

+j&sett=!

a:

~-1!

!

t!

&set"a=0!

a!

"

set"j=!

a:

~-2,1!

"&setvar2=!

var2:

~0,-1!

if!

j!

neq0set"t=!

j!

!

t!

"

Endlocal&set%~3=%t%&goto:

EOF

:

jian减法函数(封装)by@随风@

:

:

计算1000位以内的正整数减法

setlocalenabledelayedexpansion&setf=&set"lin=00000"

for/l%%ain(115)doset"lin=!

lin!

!

lin!

!

lin!

"

setvar1=!

lin!

%~1&setvar2=!

lin!

%~2&setvard1=&set/aj=0

sett=&setvar1=!

var1:

~-1000!

&set"var2=!

var2:

~-1000!

"

if"!

var1!

"lss"!

var2!

"(setvar1=%~2&set"var2=%~1"

set"f=-")elsesetvar1=%~1&set"var2=%~2"

for/l%%ain(019)doset"var1=!

var1:

%%a=%%a!

"

for%%ain(!

var1!

)doset"vard1=%%a!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1