找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: wxcute

[ 新手练习 小结 ] 批处理寻找随机数

[复制链接]
发表于 2009-2-19 21:17:29 | 显示全部楼层

再精炼一下

@echo off
setlocal enabledelayedexpansion
set /a a=%random%
set /a b=%random%
echo %a%=%b%
for /l %%i in (0,1,4) do (
set /a c1+=a:~%%i,1!
set /a c2+=!b:~%%i,1! )
set /a c=c1+c2
echo %c%
pause>nul

评分

参与人数 1PB +1 收起 理由
wxcute + 1 鼓励一下,可惜没看清题意。

查看全部评分

发表于 2009-3-2 02:19:03 | 显示全部楼层

回复 1楼 的帖子


  1. @echo off
  2. echo set %random%= %random% >>my.txt
  3. for /f "tokens=2,3 delims== " %%i in (my.txt) do (
  4.   echo varName--%%i *** varValue--%%j
  5.   set x=%%i
  6.   set y=%%j
  7. )

  8. :xx 从左面截取一符号,放到右面,并添加“+”号,此时为字符串
  9. set  x=%x:~1%+^%x:~,1%  
  10. if "%x:~,1%" neq "+" goto xx else goto yy
  11. rem 这里加引号,我实验了好多次才成功,花的时间主要在这个if中的引号上

  12. :yy 对值进行循环移位,此时为字符串
  13. set y=%y:~1%^+%y:~,1%  
  14. if "%y:~,1%" neq "+"  goto yy
  15. del /q my.txt

  16. :end 把字符串,通过set /a 自动转化为数值计算。
  17. call echo varName=%%x%%
  18. set /a x=%x%0 &call echo %%x%%
  19. call echo varValue=%%y%%
  20. set /a y=%y%
  21. call echo %%y%%
  22. set /a total=%x%+%y%
  23. call echo varName+varValue=%%total%%
  24. echo. ok---bye
复制代码

[ 本帖最后由 myzwd 于 2009-3-2 02:29 编辑 ]

评分

参与人数 1PB +7 收起 理由
wxcute + 7 通过临时文件作处理,很好。以前未加分,现 ...

查看全部评分

发表于 2011-8-7 15:13:18 | 显示全部楼层
回复 1# wxcute

郁闷了,一开始的时候,一直想用set 将=替换掉,在尝试了许久之后无法,
于是查询了许多帖子,然后从google搜到了论坛,才知道set无法替换=,崩溃。

  1.     @echo off&setlocal enabledelayedexpansion
  2. set %random%=%random%
  3. for /f "delims=" %%i in ('set') do (set str=%%i&&goto A)
  4. :A
  5. for /f "delims== tokens=1,2" %%i in ("!str!") do (
  6.         echo first=%%i second=%%j
  7.         set "str=%%i%%j")
  8. for /l %%i in (0 1 9) do (set "str=!str:%%i=+%%i!")
  9. set /a t=!str!
  10. echo total=!t!
  11. pause
复制代码
发表于 2011-8-7 22:18:17 | 显示全部楼层
本帖最后由 zaixinxiangnian 于 2011-8-7 22:30 编辑

不理解二楼这句 (for /f "delims=" %%i in ('set') do set str=%%i) 为什么这行总是显示一样的结果  而不是显示默认的所有行的第一节内容,而且只显示一行
发表于 2017-2-22 17:31:08 | 显示全部楼层
好难啊,我想到用
for /f "tokens=1,2 delims==" %%a in ('set^|findstr /b [0-9]')
来找到%random%=%random%前后的值。
但是后面还得逐字提取吗?伤脑筋。。
发表于 2017-2-23 11:59:23 | 显示全部楼层

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set %random%=%random%
  4. for /f "tokens=1,2 delims==" %%a in ('set^|findstr /b [0-9]') do (
  5.     echo;变量%%a,其值%%b
  6.     set var=%%a%%b
  7. )
  8. for /l %%i in (0,1,10) do (
  9.     set /a n=%%i
  10.     call set /a sum+=%%var:~!n!,1%% 2>nul
  11. )
  12. echo;各位数的和是%sum%&pause>nul
复制代码
发表于 2018-7-29 12:47:19 | 显示全部楼层
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set var_random=%random%
  4. set !var_random!=%random%
  5. set sumresult=0

  6. echo %var_random%=!%var_random%!

  7. REM 计算随机变量名的各位数字之和
  8. call:GetSum %var_random%!%var_random%!
  9. echo %var_random%!%var_random%!=!sumresult!

  10. exit /b 0

  11. :GetSum
  12. set randomstr=%1

  13. for /l %%i in (0,1,30) do (
  14.         set tempnum1=!randomstr:~%%i, 1!
  15.         if "!tempnum1!"=="" (
  16.                 goto EndVar
  17.         )
  18.         set /a sumresult+=!tempnum1!
  19. )
  20. :EndVar
  21. goto:EOF
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 01:41 , Processed in 0.020000 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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