无忧启动论坛

标题: dos命令 “if”中的条件句能否加入函数或一些简单算式? [打印本页]

作者: 阿尔法孝直    时间: 2006-1-22 18:27
标题: dos命令 “if”中的条件句能否加入函数或一些简单算式?
比如
if 2*2==4 echo abc
行不行???
作者: magictek    时间: 2006-1-22 19:27
标题: dos命令 “if”中的条件句能否加入函数或一些简单算式?
显然,仅仅使用内部命令,是不行滴,以前有个什么小软件,忘记叫什么了,可以进行简单的运算
作者: tmt2008    时间: 2006-9-8 16:31
我也想知道。
作者: namejm    时间: 2006-9-8 20:17
原帖由 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
复制代码

作者: 老毛桃    时间: 2006-9-8 21:45
原帖由 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
复制代码

作者: lxl1638    时间: 2006-9-8 22:05
见识了,想不到MS的BAT升级到CMD后竟有这样的功能。
作者: namejm    时间: 2006-9-8 22:37
  既然老毛桃版主提出了个水仙花数的话题,我也来贴段代码凑个热闹:

  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
复制代码

作者: bdfcy    时间: 2006-9-9 03:17
高手过招啊...
作者: 老毛桃    时间: 2006-9-9 10:42
原帖由 namejm 于 2006-9-8 22:37 发表
  既然老毛桃版主提出了个水仙花数的话题,我也来贴段代码凑个热闹:

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

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

我的是前年写的,当时根本没有接触过 For,今天算是见识了!呵呵,高手!
作者: turboy    时间: 2006-9-9 14:05
毛桃的是GWBASIC版的,namejm是VB版的,呵呵!
作者: tmt2008    时间: 2006-9-12 19:09
原帖由 namejm 于 2006-9-8 08:17 PM 发表

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

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


是纯DOS吗?
作者: namejm    时间: 2006-11-17 17:30
原帖由 tmt2008 于 2006-9-12 07:09 PM 发表


是纯DOS吗?

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




欢迎光临 无忧启动论坛 (http://wuyou.net/) Powered by Discuz! X3.3