[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. for /f "delims=" %%l in (ip.txt) do (
  4.   set "cnt=0"
  5.   for %%i in (%%l) do (
  6.     set /a cnt+=1
  7.     if !cnt! leq 2 (
  8.       set tt=%%i
  9.       REM set /a (((222)*256+248)*256+240)*256+1 这种形式的结果将超出批处理计算范围, 故不可用
  10.       set "sum=0"
  11.       for %%t in (!tt:.^= !) do (
  12.         call :cen !sum! 256 sum
  13.         call :jia !sum! %%t sum
  14.       )
  15.       set /p=!sum! <nul
  16.     ) else set /p= %%i<nul
  17.   )
  18.   echo.
  19. )
  20. pause
  21. exit /b
  22. :jia 加法函数(封装)by @随风 @bbs.bathome.net
  23. ::计算任意位数的正整数加法
  24. setlocal enabledelayedexpansion&set f=&set "t="
  25. set var1=%~1&set var2=%~2&set /a j=0,n1=0,n2=0
  26. for /l %%a in (0 1 9) do (set vard1=&set "vard2="
  27. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  28. for %%a in (!var1!)do (set/a n1+=1&set vard1=%%a !vard1!)
  29. for %%a in (!var2!)do (set/a n2+=1&set vard2=%%a !vard2!)
  30. (if !n1! lss !n2! (set var1=%var2%&set "var2=%var1%"
  31. set vard1=%vard2%&set vard2=%vard1%))&set "var2=!var2: =!"
  32. for %%a in (!vard1!) do (if "!var2!"=="" set /a var2=0
  33. set /a a=%%a+!var2:~-1!+j&set t=!a:~-1!!t!&set "a=0!a!"
  34. set "j=!a:~-2,1!"&set var2=!var2:~0,-1!)
  35. if !j! neq 0 set "t=!j!!t!"
  36. Endlocal&set %~3=%t%&goto :EOF
  37. :cen 乘法函数(封装)by @随风 @bbs.bathome.net
  38. ::计算任意位数的正整数乘法
  39. setlocal enabledelayedexpansion
  40. if "%~1"=="0" Endlocal&set %~3=0&goto :EOF
  41. if "%~2"=="0" Endlocal&set %~3=0&goto :EOF
  42. set f=&set jia=&set ji=&set /a n1=0,n2=0
  43. set vard1=&set "vard2="&set var1=%~1&set "var2=%~2"
  44. for /l %%a in (0 1 9) do (
  45. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  46. for %%a in (!var1!)do (set /a n1+=1&set vard1=%%a !vard1!)
  47. for %%a in (!var2!)do (set /a n2+=1&set vard2=%%a !vard2!)
  48. if !n1! gtr !n2! (set vard1=%vard2%&set vard2=%vard1%)
  49. for %%a in (!vard1!) do (set "t="&set /a j=0
  50. for %%b in (!vard2!) do (if "!jia!"=="" set /a jia=0
  51. set /a a=%%a*%%b+j+!jia:~-1!&set "t=!a:~-1!!t!"
  52. set a=0!a!&set "j=!a:~-2,1!"&set jia=!jia:~0,-1!)
  53. set "ji=!t:~-1!!ji!"
  54. if "!j:~0,1!"=="0" (set ss=) else set "ss=!j:~0,1!"
  55. set jia=!ss!!t:~0,-1!)
  56. if not "!j:~0,1!"=="0" set "t=!j:~0,1!!t!"
  57. set "ji=!t!!ji:~1!"
  58. Endlocal&set %~3=%ji%&goto :EOF
复制代码

[ 本帖最后由 neorobin 于 2010-7-14 00:12 编辑 ]

TOP

再回楼主

稍作修改即可 输出 到文件, 将原来的关键输出代码 全部 括起, 如下重新安排
  1. >ip2.txt (
  2.   关键输出代码部分
  3. )
复制代码
做好后便是
  1. @echo off
  2. setlocal enableDelayedExpansion
  3. >ip2.txt (
  4. for /f "delims=" %%l in (ip.txt) do (
  5. set "cnt=0"
  6. for %%i in (%%l) do (
  7. set /a cnt+=1
  8. if !cnt! leq 2 (
  9. set tt=%%i
  10. REM set /a (((222)*256+248)*256+240)*256+1 这种形式的结果将超出批处理计算范围, 故不可用
  11. set "sum=0"
  12. for %%t in (!tt:.^= !) do (
  13. call :cen !sum! 256 sum
  14. call :jia !sum! %%t sum
  15. )
  16. set /p=!sum! <nul
  17. ) else set /p= %%i<nul
  18. )
  19. echo.
  20. )
  21. )
  22. start ip2.txt
  23. pause
  24. exit /b
  25. :jia 加法函数(封装)by @随风 @bbs.bathome.net
  26. ::计算任意位数的正整数加法
  27. setlocal enabledelayedexpansion&set f=&set "t="
  28. set var1=%~1&set var2=%~2&set /a j=0,n1=0,n2=0
  29. for /l %%a in (0 1 9) do (set vard1=&set "vard2="
  30. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  31. for %%a in (!var1!)do (set/a n1+=1&set vard1=%%a !vard1!)
  32. for %%a in (!var2!)do (set/a n2+=1&set vard2=%%a !vard2!)
  33. (if !n1! lss !n2! (set var1=%var2%&set "var2=%var1%"
  34. set vard1=%vard2%&set vard2=%vard1%))&set "var2=!var2: =!"
  35. for %%a in (!vard1!) do (if "!var2!"=="" set /a var2=0
  36. set /a a=%%a+!var2:~-1!+j&set t=!a:~-1!!t!&set "a=0!a!"
  37. set "j=!a:~-2,1!"&set var2=!var2:~0,-1!)
  38. if !j! neq 0 set "t=!j!!t!"
  39. Endlocal&set %~3=%t%&goto :EOF
  40. :cen 乘法函数(封装)by @随风 @bbs.bathome.net
  41. ::计算任意位数的正整数乘法
  42. setlocal enabledelayedexpansion
  43. if "%~1"=="0" Endlocal&set %~3=0&goto :EOF
  44. if "%~2"=="0" Endlocal&set %~3=0&goto :EOF
  45. set f=&set jia=&set ji=&set /a n1=0,n2=0
  46. set vard1=&set "vard2="&set var1=%~1&set "var2=%~2"
  47. for /l %%a in (0 1 9) do (
  48. set var1=!var1:%%a= %%a !&set var2=!var2:%%a= %%a !)
  49. for %%a in (!var1!)do (set /a n1+=1&set vard1=%%a !vard1!)
  50. for %%a in (!var2!)do (set /a n2+=1&set vard2=%%a !vard2!)
  51. if !n1! gtr !n2! (set vard1=%vard2%&set vard2=%vard1%)
  52. for %%a in (!vard1!) do (set "t="&set /a j=0
  53. for %%b in (!vard2!) do (if "!jia!"=="" set /a jia=0
  54. set /a a=%%a*%%b+j+!jia:~-1!&set "t=!a:~-1!!t!"
  55. set a=0!a!&set "j=!a:~-2,1!"&set jia=!jia:~0,-1!)
  56. set "ji=!t:~-1!!ji!"
  57. if "!j:~0,1!"=="0" (set ss=) else set "ss=!j:~0,1!"
  58. set jia=!ss!!t:~0,-1!)
  59. if not "!j:~0,1!"=="0" set "t=!j:~0,1!!t!"
  60. set "ji=!t!!ji:~1!"
  61. Endlocal&set %~3=%ji%&goto :EOF
复制代码
1

评分人数

TOP

回复 6楼 的帖子

在 cn-dos 有帖, netbenton 等人给出了更简洁的解
http://www.cn-dos.net/forum/viewthread.php?tid=45734

TOP

回复 8楼 的帖子

楼主要的是 点分 4 段 十进制 转换为 十进制单一数
你这是所要求的逆过程

点分 4 段 十进制 转换为 十进制单一数
关键是第一段 在 127 以上时, set /a 计算范围已不满足, 故增加了复杂性

TOP

返回列表