无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 10659|回复: 11
打印 上一主题 下一主题

dos命令 “if”中的条件句能否加入函数或一些简单算式?

[复制链接]
跳转到指定楼层
1#
发表于 2006-1-22 18:27:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2#
发表于 2006-1-22 19:27:04 | 只看该作者

dos命令 “if”中的条件句能否加入函数或一些简单算式?

显然,仅仅使用内部命令,是不行滴,以前有个什么小软件,忘记叫什么了,可以进行简单的运算
回复

使用道具 举报

3#
发表于 2006-9-8 16:31:02 | 只看该作者
我也想知道。
回复

使用道具 举报

4#
发表于 2006-9-8 20:17:55 | 只看该作者
原帖由 magictek 于 2006-1-22 07:27 PM 发表
显然,仅仅使用内部命令,是不行滴,以前有个什么小软件,忘记叫什么了,可以进行简单的运算

  版主此言差矣,DOS 命令中是可以进行简单的运算的,试试下面的代码就知道了。

  1. @echo off
  2. set /a num=2*2
  3. if %num% equ 4 echo abc
  4. pause
复制代码
回复

使用道具 举报

5#
发表于 2006-9-8 21:45:32 | 只看该作者
原帖由 namejm 于 2006-9-8 20:17 发表

  版主此言差矣,DOS 命令中是可以进行简单的运算的,试试下面的代码就知道了。

@echo off
set /a num=2*2
if %num% equ 4 echo abc
pause

楼上说得没错。DOS 命令确实能够进行一些简单的运算。早期我曾经写过一个批处理,求解三位的水仙花数。即一个三位数,它等于它的个位、十位、百位数的立方和,比如 153=1*1*1+5*5*5+3*3*3。我写的这个批处理如下:
水仙花3.cmd
  1. @echo off
  2. set Out=水仙花3.txt
  3. title 水仙花(三位数)
  4. echo 正在计算...
  5. if exist %Out% del %Out%

  6. set /a c=0

  7. :loopc
  8. if %c%==9 goto exit
  9. set /a c=%c%+1
  10. set /a b=0
  11. set /a a=0
  12. cls
  13. echo 已完成 %c%/10
  14. goto loopa

  15. :loopb
  16. if %b%==9 goto loopc
  17. set /a b=%b%+1
  18. set /a a=0
  19. goto loopa

  20. :loopa
  21. if %a%==10 goto loopb
  22. set /a num1=%c%*%c%*%c%+%b%*%b%*%b%+%a%*%a%*%a%
  23. set /a num2=100*%c%+10*%b%+%a%
  24. if %num1%==%num2% echo %num1%>>%Out%
  25. REM echo %num2%>>%Out%
  26. set /a a=%a%+1
  27. goto loopa

  28. :exit
复制代码

后来我又将它扩展到 4 为水仙花数的求解,即 ABCD=A*A*A*A+B*B*B*B+C*C*C*C+D*D*D*D,其批处理代码内容如下:
水仙花4.cmd
  1. @echo off
  2. set Out=水仙花4.txt
  3. title 水仙花(四位数)
  4. echo 正在计算...
  5. if exist %Out% del %Out%

  6. set /a d=0

  7. :loopd
  8. if %d%==9 goto exit
  9. set /a d=%d%+1
  10. set /a c=0
  11. set /a b=0
  12. set /a a=0
  13. goto loopa

  14. :loopc
  15. cls
  16. echo 已完成 %d%%c%/100
  17. if %c%==9 goto loopd
  18. set /a c=%c%+1
  19. set /a b=0
  20. set /a a=0
  21. goto loopa

  22. :loopb
  23. if %b%==9 goto loopc
  24. set /a b=%b%+1
  25. set /a a=0
  26. goto loopa

  27. :loopa
  28. if %a%==10 goto loopb
  29. set /a num1=%d%*%d%*%d%*%d%+%c%*%c%*%c%*%c%+%b%*%b%*%b%*%b%+%a%*%a%*%a%*%a%
  30. set /a num2=1000*%d%+100*%c%+10*%b%+%a%
  31. if %num1%==%num2% echo %num1%>>%Out%
  32. REM echo %num2%>>%Out%
  33. set /a a=%a%+1
  34. goto loopa

  35. :exit
复制代码
回复

使用道具 举报

6#
发表于 2006-9-8 22:05:47 | 只看该作者
见识了,想不到MS的BAT升级到CMD后竟有这样的功能。
回复

使用道具 举报

7#
发表于 2006-9-8 22:37:19 | 只看该作者
  既然老毛桃版主提出了个水仙花数的话题,我也来贴段代码凑个热闹:

  1. @echo off
  2. echo.
  3. echo         三位的水仙花数有:
  4. echo.
  5. setlocal enabledelayedexpansion
  6. for /l %%i in (1,1,9) do (
  7.     for /l %%j in (0,1,9) do (
  8.         for /l %%k in (0,1,9) do (
  9.             set a=%%i
  10.             set b=%%j
  11.             set c=%%k
  12.             set /a num1=!a!!b!!c!
  13.             set /a num2=!a!*!a!*!a!+!b!*!b!*!b!+!c!*!c!*!c!
  14.             if !num1! equ !num2! echo                !num1!
  15.         )
  16.     )
  17. )
  18. pause
复制代码
回复

使用道具 举报

8#
发表于 2006-9-9 03:17:38 | 只看该作者
高手过招啊...
回复

使用道具 举报

9#
发表于 2006-9-9 10:42:25 | 只看该作者
原帖由 namejm 于 2006-9-8 22:37 发表
  既然老毛桃版主提出了个水仙花数的话题,我也来贴段代码凑个热闹:

@echo off
echo.
echo         三位的水仙花数有:
echo.
setlocal enabledelayedexpansion
for /l %%i in (1,1,9) do (
    for  ...

晕,你的代码执行效率太高了,比我的明显快得多啊!

我的是前年写的,当时根本没有接触过 For,今天算是见识了!呵呵,高手!
回复

使用道具 举报

10#
发表于 2006-9-9 14:05:40 | 只看该作者
毛桃的是GWBASIC版的,namejm是VB版的,呵呵!
回复

使用道具 举报

11#
发表于 2006-9-12 19:09:49 | 只看该作者
原帖由 namejm 于 2006-9-8 08:17 PM 发表

  版主此言差矣,DOS 命令中是可以进行简单的运算的,试试下面的代码就知道了。

@echo off
set /a num=2*2
if %num% equ 4 echo abc
pause


是纯DOS吗?
回复

使用道具 举报

12#
发表于 2006-11-17 17:30:33 | 只看该作者
原帖由 tmt2008 于 2006-9-12 07:09 PM 发表


是纯DOS吗?

  我说的不是纯DOS下,至于楼主是不是特指纯DOS就不太清楚了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-28 17:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表