批处理计算器.docx
- 文档编号:23475519
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:18
- 大小:20.80KB
批处理计算器.docx
《批处理计算器.docx》由会员分享,可在线阅读,更多相关《批处理计算器.docx(18页珍藏版)》请在冰豆网上搜索。
批处理计算器
复制时要把代码最下方的“智能批处理计算器使用说明”一起复制到代码中。
否则会影响代码运行。
@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!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 批处理 计算器