中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 一个可以计算简单表达式的批处理
« [1] [2] »
作者:
标题: 一个可以计算简单表达式的批处理 上一主题 | 下一主题
brglng
银牌会员

永遠的DOS~~~



积分 1200
发帖 466
注册 2005-2-1
来自 上海
状态 离线
『第 16 楼』:  

谢谢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 [/A 文件路径] : 普通模式下运行时总是将计算结果自动存入指定文件。
echo   %0 [/N]          : 普通模式下运行时只计算而不存入文件。
echo   %0 [/?]          : 查看命令行书写帮助
echo   %0 [/? Expr]     : 查看命令行书写帮助与表达式书写帮助
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=是否将表达式和计算结果存入文件[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




32位才是DOS未来的希望
个人网志:http://sololand.moe
2005-8-31 12:57
查看资料  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 17 楼』:  

Re Brglng:

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

{8905}[分享]批处理编程的异类
http://www.cn-dos.net/forum/view ... amp;page=1#pid54226



※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-9-11 13:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
brglng
银牌会员

永遠的DOS~~~



积分 1200
发帖 466
注册 2005-2-1
来自 上海
状态 离线
『第 18 楼』:  

经测试完全正常,所有参数都可正常使用,暂时还没有发现什么不对。非常感谢Will Sort。



32位才是DOS未来的希望
个人网志:http://sololand.moe
2005-9-12 11:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zah98
新手上路





积分 9
发帖 4
注册 2006-10-22
状态 离线
『第 19 楼』:  

不错,谢谢

2006-10-24 08:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 20 楼』:  

我来凑个热闹,呵呵

Eval.vbs
WScript.Echo Eval(WScript.Arguments(0))
运行

  Quote:
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'>"
2006-10-24 10:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 21 楼』:  


  嘿嘿,多谢 electronixtar 兄,又学一招了,继续~支持~


2006-10-24 11:08
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
cxq5173
初级用户





积分 23
发帖 10
注册 2006-10-23
状态 离线
『第 22 楼』:  

学习了

2006-10-24 13:04
查看资料  发短消息 网志   编辑帖子  回复  引用回复
karl0000
新手上路





积分 6
发帖 3
注册 2006-10-25
状态 离线
『第 23 楼』:  

好东西,谢谢

2006-10-29 11:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: