中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-22 06:00
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个可以计算简单表达式的批处理 精华I 查看 12,182 回复 22
16 发表于 2005-08-31 12:57 ·  中国 上海 徐汇区 电信
银牌会员
★★★
永遠的DOS~~~
积分 1,200
发帖 466
注册 2005-02-01 00:00
21年会员
UID 35867
性别 男
来自 上海
状态 离线
谢谢Will Sort指点!
我又改进了一下代码:
:: Eval.cmd - 2K/XP表达式计算批处理
:: Brglng - 2005.8.31
:: Thanks to: Will Sort modified on 2005.8.26
:: This batch file can only run in Chinese version of NT-based Windows! It cannot be run in DOS/Win9x/Me!
:: And do not use COMMAND.COM instead of CMD.EXE! Command.com cannot display Chinese, and its SET command is not as powerful as that of CMD.EXE
@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"=="/?" if not "%1"=="" goto EvalArgument

:EvalLogo
echo *****************************************************************
echo * Eval.cmd - 2K/XP表达式计算批处理 *
echo * Brglng 2005.8.31 http://brglng.ys168.com *
echo * Thanks to: Will Sort modified on 2005.8.26 *
echo *****************************************************************
echo.
if not "%1"=="/?" echo 请输入表达式(输入"?"查看帮助, "Q"退出) & goto inputExpr

:Help
echo 命令行书写帮助:
echo.
echo %0
echo 表达式 : 指定要计算的表达式
echo 文件路径 : 若指定此参数则自动将表达式和计算结果存入指定文件。
echo.
echo %0 : 普通模式下运行时总是将计算结果自动存入指定文件。
echo %0 : 普通模式下运行时只计算而不存入文件。
echo %0 : 查看命令行书写帮助
echo %0 : 查看命令行书写帮助与表达式书写帮助
echo.
echo 如果不使用参数则进入默认的计算模式, 每次都须输入表达式并
echo 询问是否存入文件。
if /i not "%2"=="Expr" goto end
echo.
pause

:ExprHelp
echo 表达式书写帮助:
echo.
echo 本表达式计算批处理能处理简单计算,不支持浮点数以及高级数学函数。
echo 它以递减的优先权顺序支持下列操作:
echo.
echo () - 分组
echo ! ~ - - 一元运算符
echo * / %% - 算数运算符
echo + - - 算数运算符
echo ^<^< ^>^> - 逻辑移位
echo - 按位“与”
echo ^^ - 按位“异”
echo ^| - 按位“或”
echo = *= /= %%= += -= - 赋值
echo ^&= ^^= ^|= ^<^<= ^>^>=
echo , - 表达式分隔符
echo.
echo 如果在命令行下用参数计算,使用任何逻辑或取余操作符需要将表达式字符串用引号扩起来。表达式中的任何非数字字符串键作为环境变量名称,这些环境变量名称的值应在使用前定义,如果未在当前环境中定义,则默认为为零。您可以直接使用环境变量值做计算而不用键入那些 %% 符号来得到它们的值。除十六进制有 0x 前缀,八进制有 0 前缀的,数字值为十进位数字。因此, 0x12 与 18 和 022 相同。请注意八进制公式可能很容易搞混: 08 和 09 是无效的数字,因为 8 和 9 不是有效的八进制位数。
goto end

: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 "%Expr%"=="?" call:ExprHelp & 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=是否将表达式和计算结果存入文件?
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
32位才是DOS未来的希望
个人网志:http://sololand.moe
17 发表于 2005-09-11 13:33 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re Brglng:

已经代码转贴于下帖,请查阅并测试精简文档后的代码的稳定性。

{8905}批处理编程的异类
http://www.cn-dos.net/forum/viewthread.php?tid=8905&page=1#pid54226
※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
18 发表于 2005-09-12 11:00 ·  中国 上海 徐汇区 电信
银牌会员
★★★
永遠的DOS~~~
积分 1,200
发帖 466
注册 2005-02-01 00:00
21年会员
UID 35867
性别 男
来自 上海
状态 离线
经测试完全正常,所有参数都可正常使用,暂时还没有发现什么不对。非常感谢Will Sort。
32位才是DOS未来的希望
个人网志:http://sololand.moe
19 发表于 2006-10-24 08:04 ·  中国 广东 广州 广东金万邦科技投资有限公司(新一代数据中心)IDC机房(BGP)
新手上路
积分 9
发帖 4
注册 2006-10-22 10:19
19年会员
UID 67689
性别 男
状态 离线
不错,谢谢
20 发表于 2006-10-24 10:25 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
我来凑个热闹,呵呵

Eval.vbs

WScript.Echo Eval(WScript.Arguments(0))


运行

cscript //NoLogo Eval.vbs 3.1415926*2E5
返回
628318.52


成功,yeah!

或者不用输入参数,交互式输入的:


WScript.Echo Eval(WScript.StdIn.ReadLine)


[ Last edited by electronixtar on 2006-10-24 at 10:31 AM ]

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
21 发表于 2006-10-24 11:08 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
19年会员
UID 59080
状态 离线

  嘿嘿,多谢 electronixtar 兄,又学一招了,继续~支持~
22 发表于 2006-10-24 13:04 ·  中国 广东 潮州 电信
初级用户
积分 23
发帖 10
注册 2006-10-23 13:03
19年会员
UID 67889
性别 男
状态 离线
学习了
23 发表于 2006-10-29 11:27 ·  中国 江苏 南京 电信
新手上路
积分 6
发帖 3
注册 2006-10-25 21:31
19年会员
UID 68245
性别 男
状态 离线
好东西,谢谢
论坛跳转: