Board logo

标题: [ 新手练习 5 ] 批处理随机显示星期几 [打印本页]

作者: wxcute    时间: 2008-11-16 20:14     标题: [ 新手练习 5 ] 批处理随机显示星期几

一周有七天
周一 周二 周三 周四 周五 周六 周日

利用随机数随机显示一天,开始可以用阿拉伯数字,但最终显示时要用汉字 ^_^

答对题均加分,以第一个分高。

参考:[ 一日一教学 ] 随机数的应用
http://bbs.bathome.net/thread-2563-1-1.html
上一题:[ 新手习题 4 ] 循环十秒倒计时
http://bbs.bathome.net/thread-2494-1-1.html
下一题:[ 新手习题 6 ] 添加汉字行号
http://bbs.bathome.net/thread-2569-1-1.html


所发代码若不止一行,请用code标签把代码部分括起来。

Q: 如何用code把代码扩起来?
A: http://bbs.bathome.net/thread-404-1-1.html
作者: akiraakito    时间: 2008-11-16 21:27

  1. @echo off
  2. set /a day=%random% %% 7
  3. if %day%==0 echo 星期日
  4. if %day%==1 echo 星期一
  5. if %day%==2 echo 星期二
  6. if %day%==3 echo 星期三
  7. if %day%==4 echo 星期四
  8. if %day%==5 echo 星期五
  9. if %day%==6 echo 星期六
  10. pause>nul
复制代码
应该是最好懂的代码了...
作者: 随风    时间: 2008-11-16 21:32     标题: 回复 2楼 的帖子

确实是最好懂的,但也是最。。。。。
作者: BBCC    时间: 2008-11-16 21:32

  1. @echo off
  2. set "code=周一 周二 周三 周四 周五 周六 周日"
  3. :main
  4. set /a strRan=%random%%%7+1
  5. for /f "tokens=%strRan% delims=, " %%a in ("%code%") do (echo %%a)
  6. pause>nul
  7. goto :main
复制代码

作者: BBCC    时间: 2008-11-16 21:33

一开始被LZ的中文空格搞晕了...
作者: wxcute    时间: 2008-11-16 21:41

回 5 楼:习惯用全角空格来对齐 ^_^

大家试试不用 for
作者: 随风    时间: 2008-11-16 22:06

确实,不用for显得更直接,新手都来试试。。
作者: hlzj88    时间: 2008-11-16 22:14

  1. ::按一下变一个
  2. @echo off
  3. set /a n=%random% %% 7+1
  4. if %n%==1 echo 今天周一
  5. if %n%==2 echo 今天周二
  6. if %n%==3 echo 今天周三
  7. if %n%==4 echo 今天周四
  8. if %n%==5 echo 今天周五
  9. if %n%==6 echo 今天周六,休息,看望家人
  10. if %n%==7 echo 今天周日,明天上班,抓紧休息
  11. pause>nul
  12. %0
复制代码
更喜欢BBCC的代码,差一大截啊

[ 本帖最后由 hlzj88 于 2008-11-16 22:28 编辑 ]
作者: 随风    时间: 2008-11-16 22:40     标题: 回复 8楼 的帖子

你这个和2楼的有区别吗?
给大家个提示,充分利用变量的截取。
作者: hlzj88    时间: 2008-11-16 23:26

  1. @echo off
  2. set var=周一周二周三周四周五周六周日
  3. set /a n=%random% %% 7+1
  4. if %n% lss 2 echo %var:~0,2%
  5. if %n%==2 echo %var:~2,2%
  6. if %n%==3 echo %var:~4,2%
  7. if %n%==4 echo %var:~6,2%
  8. if %n%==5 echo %var:~8,2%
  9. if %n%==6 echo %var:~-4,2%
  10. if %n% gtr 6 echo %var:~-2,2%
  11. pause>nul
  12. %0
复制代码
想高一点,高不了啊,算是对上面8楼的修改吧

[ 本帖最后由 hlzj88 于 2008-11-16 23:38 编辑 ]
作者: wxcute    时间: 2008-11-17 08:55

多谢 随风 兄帮忙照看帖子。

大家不用拼命想,偶尔想到了再来回答也行。
作者: nomyself    时间: 2008-11-17 09:21

  1. @echo off
  2. set /a n=%random% %% 7
  3. if %n%==0 echo 今天是星期一
  4. if %n%==1  echo 今天是星期二
  5. if %n%==2 echo 今天是星期三
  6. if %n%==3 echo 今天是星期四
  7. if %n%==4 echo 今天是星期五
  8. if %n%==5 echo 今天是星期六
  9. if %n%==6 echo 今天是星期天
  10. ping -n 2 127.1>nul>nul
  11. %0
复制代码

作者: BBCC    时间: 2008-11-17 13:23

  1. @echo off&setlocal enabledelayedexpansion
  2. :main
  3. set "code=周一周二周三周四周五周六周日"&set /a strRan=%random%%%12+1&set /a strRan2=!strRan!%%2
  4. if "!strRan2!" equ "0" (set strPrint=!code:~-%strRan%,2!&echo. !strPrint!&pause&goto :main ) else (goto :main)
复制代码
貌似不显示周一?
作者: wxcute    时间: 2008-11-17 13:39     标题: 回复 13楼 的帖子

%random%%%12+1

%random%%%14
就好了。

一周可是有 7 天阿,12 / 2 怎么也只有 6 天阿!

还可再简化。
作者: lhjoanna    时间: 2008-11-17 14:23

呵,wxcute兄指的是这个吧?
  1. @echo off
  2. set "str=一二三四五六日"
  3. set /a num=%random%%%7
  4. call echo 星期%%str:~%num%,1%%
  5. pause>nul
复制代码

作者: BBCC    时间: 2008-11-17 19:36

其实是我想得太复杂。。。
方法跟15L的一样。。。
作者: hlzj88    时间: 2008-11-18 05:17

原帖由 lhjoanna 于 2008-11-17 14:23 发表
呵,wxcute兄指的是这个吧?@echo off
set "str=一二三四五六日"
set /a num=%random%%%7
call echo 星期%%str:~%num%,1%%
pause>nul

不明白这里的call具体的意义,延时吗,用ping又出不了效果,请教说明或相关知识点
作者: BBCC    时间: 2008-11-18 13:03

原帖由 hlzj88 于 2008-11-18 05:17 发表

不明白这里的call具体的意义,延时吗,用ping又出不了效果,请教说明或相关知识点


貌似搜索一下变量延迟应该有结果。
作者: 辉少    时间: 2008-11-21 16:46

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "str=日一二三四五六"
  4. set /a pp=%random%%%7
  5. echo  星期!str:~%pp%,1!
  6. pause>nul
复制代码

作者: firewolf85    时间: 2008-12-8 11:00

  1. @echo off
  2. set a=一二三四五六日
  3. set /a num=%random%%%7
  4. set /p =星期<nul
  5. call set /p =%%a:~%num%,1%%<nul
  6. pause>nul
复制代码

作者: steven007    时间: 2008-12-19 15:14

  1. @echo off
  2. set /a i=%random% %% 7+1
  3. if %i%==1 echo 星期一
  4. if %i%==2 echo 星期二
  5. if %i%==3 echo 星期三
  6. if %i%==4 echo 星期四
  7. if %i%==5 echo 星期五
  8. if %i%==6 echo 星期六
  9. if %i%==7 echo 星期日
  10. ping 127.1 -n 1 >nul
  11. pause>nul
复制代码

作者: RiceFans    时间: 2008-12-19 22:44

  1. @echo off
  2. :main
  3. set "str=一二三四五六日"
  4. set /a num=%random%%%7
  5. call echo 星期: %%str:~%num%,1%%
  6. ping -n 2 127.1>nul 2>nul
  7. goto :main
复制代码
不好意思,纯粹是修改以上兄弟的(惭愧,正在学习中..)。只是为了让它自动化点。哈哈
作者: leaparde    时间: 2008-12-26 13:59

原帖由 lhjoanna 于 2008-11-17 14:23 发表
呵,wxcute兄指的是这个吧?@echo off
set "str=一二三四五六日"
set /a num=%random%%%7
call echo 星期%%str:~%num%,1%%
pause>nul


看了高手的答案,只能默默地努力了
作者: XBATI    时间: 2008-12-28 21:51     标题: 这句帮我分析下呀我都不知道:

set /a num=%random%%%7 这句请从各个角度帮我分析下
作者: lhjoanna    时间: 2008-12-28 22:48

不知楼上说的各个角度是什么角度,你把set /?看完,这句话就全部可以明白。看完后哪里不懂,再有重点的提问。
作者: skuny    时间: 2009-1-13 12:29

  1. @echo off
  2. set /a n=0
  3. call :111 一 二 三 四 五 六 日
  4. pause&goto :eof
  5. :111
  6. set /a m=%random%%%7+1
  7. call echo 星期%%%m%
  8. set /a n+=1
  9. if %n% leq 10 goto 111 else goto :eof
复制代码

作者: p05401144    时间: 2009-1-14 09:33

水平有限,只有使用蠢办法,不过可以重复使用
  1. @echo off
  2. set /a day=%random% %%7+1
  3. echo %day%
  4. if %day%==1 echo 星期一
  5. if %day%==2 echo 星期二
  6. if %day%==3 echo 星期三
  7. if %day%==4 echo 星期四
  8. if %day%==5 echo 星期五
  9. if %day%==6 echo 星期六
  10. if %day%==7 echo 星期日
  11. pause>nul
  12. %0
复制代码

作者: hxinhu12315    时间: 2009-1-28 09:19

  1. @echo off
  2. :loop
  3. set /a a=%random%%%7
  4. if %a%==0 set day=日
  5. if %a%==1 set day=一
  6. if %a%==2 set day=二
  7. if %a%==3 set day=三
  8. if %a%==4 set day=四
  9. if %a%==5 set day=五
  10. if %a%==6 set day=六
  11. echo 星期%day%
  12. pause>nul
  13. goto loop
复制代码

作者: zcy85611    时间: 2009-2-3 12:28

  1. @echo off
  2. set /a var=%random%%%7+1
  3. set str="一二三四五六日”
  4. :loop
  5. if "%var%"=="%n%" (call echo 星期%%str:~%n%,1%%) else (set /a n+=1&goto loop)
  6. pause
复制代码

作者: kingerpk    时间: 2009-2-9 17:10

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :1
  4. set /a p=!random!%%6+1
  5. echo 星期%p%
  6. pause
  7. goto 1
复制代码

作者: aresk    时间: 2009-2-14 16:47

原帖由 lhjoanna 于 2008-11-17 14:23 发表
呵,wxcute兄指的是这个吧?@echo off
set "str=一二三四五六日"
set /a num=%random%%%7
call echo 星期%%str:~%num%,1%%
pause>nul

学习了,谢谢。。。。。。。。。。。。。。。。
作者: irresolute    时间: 2009-2-14 22:10

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a bb=%random%%%7
  4. if %bb%==0 (echo 星期天) else (
  5.    if %bb%==1 (echo 星期一) else (
  6.        if %bb%==2 (echo 星期二) else (
  7.            if %bb%==3 (echo 星期三) else (
  8.                 if %bb%==4 (echo 星期四) else (
  9.                     if %bb%==5 (echo 星期五) else  (echo 星期六))))))
  10.                         
  11. pause>nul
复制代码

作者: keen    时间: 2009-3-28 10:23

自己琢磨的。
  1. @echo off
  2. set /a a=%random%%%7
  3. set "day=日一二三四五六"
  4. call, echo 周%%day:~%a%,1%%
  5. pause>nul
复制代码

作者: Lumiere    时间: 2009-3-28 13:13

  1. @echo off
  2. set /a weekday=%random%%%7
  3. set str=日一二三四五六
  4. setlocal enabledelayedexpansion
  5. echo 星期!str:~%weekday%,1!
  6. endlocal
  7. pause
复制代码

作者: cainiao736    时间: 2009-3-28 15:01

  1. @echo off
  2. set /a n=%random%%%7+1
  3. for /f "tokens=%n% delims= " %%i in ("日 一 二 三 四 五 六") do (echo 周%%i)
  4. pause
复制代码

作者: flyingsand    时间: 2009-3-28 15:11

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :start
  4. cls
  5. set m=0
  6. for %%i in (周一 周二 周三 周四 周五 周六 周日) do (
  7. set /a m+=1
  8. set !m!=%%i
  9. )
  10. set /a n=%random%%%7+1
  11. echo !%n%!
  12. pause
  13. goto start
复制代码

作者: 5810239q    时间: 2009-3-29 12:09

  1. @echo off
  2. set t="周一 周二 周三 周四 周五 周六 周日"
  3. set /a s=%random% %%7+1
  4. for /f "tokens=%s%" %%a in (%t%) do echo %%a
  5. pause
复制代码

[ 本帖最后由 5810239q 于 2009-3-29 12:12 编辑 ]
作者: energy2009    时间: 2009-4-9 20:45

  1. @echo off
  2. :m
  3. set a=%random%
  4. set b=%a:~0,1%
  5. if %b% gtr 7 goto m
  6. if %b% equ 7 echo 周日
  7. if %b% equ 1 echo 周一
  8. if %b% equ 2 echo 周二
  9. if %b% equ 3 echo 周三
  10. if %b% equ 4 echo 周四
  11. if %b% equ 5 echo 周五
  12. if %b% equ 6 echo 周六
  13. ping -n 2 127.1>nul
  14. exit
复制代码

作者: sjzong    时间: 2009-5-7 00:00

本想套用skuny兄的一段代码,谁知他已经早写好了!!
  1. @echo off&setlocal enabledelayedexpansion
  2. call :11 一 二 三 四 五 六 日
  3. pause>nul&goto :eof
  4. :11
  5. set/a a=%random% %% 7 +1
  6. call echo 星期%%!a!
复制代码

作者: aoelus    时间: 2009-5-10 12:14

  1. @echo off && setlocal enabledelayedexpansion
  2. set /a num=%random:~-1,1%
  3. set "str=天一二三四五六"
  4. if %num% gtr 6 (echo 今天是星期天) else call echo 今天是星期%%str:~!num!,1%%
  5. pause >nul
复制代码
只能根据随机数的最后一位进行判断。。
星期天会比较多。。
还是喜欢星期天啊 ^_^

[ 本帖最后由 aoelus 于 2009-5-10 13:02 编辑 ]
作者: zgq0301    时间: 2009-11-12 10:16

  1. @echo off
  2. set dayset="周一,周二,周三,周四,周五,周六,周日"
  3. set /a day=%random% %%7+1
  4. for /f "delims=, tokens=%day%" %%i in (%dayset%) do (
  5.       echo %%i
  6.       )
  7. pause>nul
  8. %0
复制代码

作者: zgq0301    时间: 2009-11-12 10:35

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set dayset=一二三四五六日
  4. set /a day=%random% %%7
  5. echo 周!dayset:~%day%,1!
  6. pause>nul
  7. %0
复制代码

作者: Seter    时间: 2009-11-12 13:34

都被写完了...
  1. @echo off
  2. set/as=%random%%%7
  3. set s=周%s:0=一%
  4. set s=%s:1=二%
  5. set s=%s:2=三%
  6. set s=%s:3=四%
  7. set s=%s:4=五%
  8. set s=%s:5=六%
  9. echo %s:6=日%
复制代码

作者: tession    时间: 2009-11-12 15:31

原帖由 lhjoanna 于 2008-11-17 14:23 发表
呵,wxcute兄指的是这个吧?@echo off
set "str=一二三四五六日"
set /a num=%random%%%7
call echo 星期%%str:~%num%,1%%
pause>nul


比如这里num等于2  会显示星期三,这应该不是想要的结果吧???
作者: Taurus    时间: 2009-11-15 14:28

..........................
@echo off
set "day=日一二三四五六"
set /a nub=%random%%%7
call echo 星期%%day:~%nub%,1%%
pause>nul



...哎~思路和楼上重覆了,几乎一模一樣... ...

[ 本帖最后由 Taurus 于 2009-11-15 14:31 编辑 ]
作者: Seter    时间: 2009-11-16 20:45

原帖由 tession 于 2009-11-12 15:31 发表


比如这里num等于2  会显示星期三,这应该不是想要的结果吧???

没错啊...num是0~6,0对应一,6对应日
作者: netbenton    时间: 2009-11-17 07:45

还有这种方法:
  1. @echo off&setlocal enabledelayedexpansion
  2. for %%a in (一 二 三 四 五 六 日) do set/a n+=1&set x!n!=%%a
  3. :lp
  4. set/a ran=1%time:~-2%%%7+1
  5. echo 星期!x%ran%!
  6. >nul ping -n 2 127.1
  7. goto :lp
复制代码

作者: pumahxh    时间: 2009-11-17 21:12

  1. @echo off
  2. set "str=周一 周二 周三 周四 周五 周六 周日"
  3. set/a n=%random%%%7+1
  4. for /f "tokens=%n%" %%i in ("%str%") do echo 随机显示:%%i
  5. pause>nul
复制代码

[ 本帖最后由 pumahxh 于 2009-11-18 08:50 编辑 ]
作者: pumahxh    时间: 2009-11-17 21:29

再发一个不用for,用set
  1. @echo off
  2. set "str=一二三四五六日"
  3. set/a n=%random%%%7
  4. call,set m=%%str:~%n%,1%%
  5. echo 随机显示:周%m%
  6. pause>nul
复制代码

作者: bamboo    时间: 2009-11-20 14:35

  1. @echo off
  2. set week=周一 周二 周三 周四 周五 周六 周日
  3. ::echo %week%
  4. set /a rand=%random%%%7+1
  5. ::echo %rand%
  6. for /f "tokens=%rand%" %%a in ("%week%") do (echo %%a)
  7. echo    按任意键退出!
  8. pause>nul
复制代码
楼主的题目直接复制字符“周一 周二 周三..”,不能用delims的默认分割,让我的代码总得不出结果,我找了好久,最后是将字符直接的间隔删掉再重输空格,才解决问题。..
作者: x576380361    时间: 2009-12-6 20:42

  1. @echo off&setlocal enabledelayedexpansion
  2. :begin
  3. set a=一二三四五六日
  4. set /a b=%random%%%7
  5. echo 周!a:~%b%,1!
  6. pause&goto begin
复制代码

作者: gbw911    时间: 2009-12-7 14:05

  1. @echo off
  2. :star
  3. for  %%i in (星期一 星期二 星期三 星期四 星期五 星期六 星期日) do echo %%i & pause>nul
  4. goto :star
复制代码

作者: lvyaojian    时间: 2009-12-13 22:11

  1. @echo off
  2. set a=周一 周二 周三 周四 周五 周六 周日
  3. set /a b=%random%%%7+1
  4. for /f "tokens=%b% delims= " %%i in ("%a%") do echo %%i
  5. pause
复制代码

作者: stonegold    时间: 2009-12-20 00:54     标题: 迷惑~

  1. @echo off
  2. set "code=周一 周二 周三 周四 周五 周六 周日"
  3. :main
  4. set /a strRan=%random%%%7+1
  5. for /f "tokens=%strRan% delims=, " %%a in ("%code%") do (echo %%a)
  6. pause>nul
  7. goto :main
复制代码
这个是四楼的代码/
我不明白set /a strRan=%random%%%7+1 去余了为什么还要加1??
如果随即数是10,那strran的值是4,运行for命令后显示的是周四,实际上10是周三啊。
作者: Kenmick    时间: 2010-1-18 20:26     标题: 学习一下,本人新手,只会用最原始的 - -b 见笑了~~

  1. @echo off
  2. set /a a=%random% %% 7
  3. if "%a%"=="0" echo 周一
  4. if "%a%"=="1" echo 周二
  5. if "%a%"=="2" echo 周三
  6. if "%a%"=="3" echo 周四
  7. if "%a%"=="4" echo 周五
  8. if "%a%"=="5" echo 周六
  9. if "%a%"=="6" echo 周日
  10. pause >nul
  11. %0
复制代码

作者: wgoxm521    时间: 2010-1-27 09:23

以前见过,但是不会。现在能做了,嘿嘿…
作者: aiguozhe    时间: 2010-1-29 11:37

@echo off
set /a a=%random% %%7+1
echo 周%a%
pause>nul
%0
回答的第一个问题,完全自己做的,比较爽
作者: P_Ricky    时间: 2010-4-14 11:40

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a a=%random% %% 7+1
  4. set b=0
  5. for %%i in (周一 周二 周三 周四 周五 周六 周日) do (
  6. set /a b+=1
  7. if !b!==!a! echo %%i)
复制代码

作者: honeybat    时间: 2010-4-15 14:52

  1. @ECHO OFF
  2. setlocal enabledelayedexpansion
  3. SET a=星期一星期二星期三星期四星期五星期六星期日
  4. set /a m=(!random!%%7)*3
  5. echo !m!
  6. echo !a:~%m%,3!
  7. pause>nul
复制代码

作者: 634175535    时间: 2010-4-16 23:55

我不是高手,前几天才迷上p这个东西!
作者: 634175535    时间: 2010-4-24 14:43

@echo off
title=随机显示星期几
:0
set/a a=%random% %% 7 +1
if %a%==1 echo 星期一
if %a%==2 echo 星期二
if %a%==3 echo 星期三
if %a%==4 echo 星期四
if %a%==5 echo 星期五
if %a%==6 echo 星期六
if %a%==7 echo 星期日
pause>nul
goto 0
作者: mangci    时间: 2010-5-13 22:21

  1. @ echo off
  2. set /a week=%random%%%8
  3. if %week% neq 0 echo,今天是星期%week%
  4. pause
复制代码

作者: poxi    时间: 2010-7-18 19:48

答:
  1. @echo off
  2. set str=一二三四五六日
  3. set /a ran=%random%%%7
  4. call set day=%%str:~%ran%,1%%
  5. echo 周%day%
  6. pause
复制代码


效果:
[attach]2725[/attach]

================
这个应该很好懂吧.....没用for 因为不太会 = =!
end;
作者: rogue_1983    时间: 2010-8-2 15:37     标题: 看我的!

<1>@echo off
:top
set /a var=%random%%%7
if %var%==0 call :a
if %var%==1 call :b
if %var%==2 call :c
if %var%==3 call :d
if %var%==4 call :e
if %var%==5 call :f
if %var%==6 call :g
:a
echo 周一&pause&goto :top
:b
echo 周二&pause&goto :top
:c
echo 周三&pause&goto :top
:d
echo 周四&pause&goto :top
:e
echo 周五&pause&goto :top
:f
echo 周六&pause&goto :top
:g
echo 周天&pause&goto :top
pause
<2>@echo off
:top
set /a var=%random%%%7
if %var%==0 call echo 周一&pause&goto :top
if %var%==1 call echo 周二&pause&goto :top
if %var%==2 call echo 周三&pause&goto :top
if %var%==3 call echo 周四&pause&goto :top
if %var%==4 call echo 周五&pause&goto :top
if %var%==5 call echo 周六&pause&goto :top
if %var%==6 call echo 周天&pause&goto :top

[ 本帖最后由 rogue_1983 于 2010-8-2 15:48 编辑 ]
作者: zcydez    时间: 2010-8-4 18:14

@echo off
setlocal EnableDelayedExpansion
set a=一二三四五六日
set /a b=%random%%%7
set c=!a:~%b%,1!
echo %c%
pause
%0
作者: wangqi0077    时间: 2010-9-9 13:49

  1. @echo off
  2. set a=星期一
  3. set b=星期二
  4. set c=星期三
  5. set d=星期四
  6. set e=星期五
  7. set f=星期六
  8. set g=星期日
  9. set /a n=%random%%%7+1
  10. if %n% equ 1 (echo %a%) else (
  11. if %n% equ 2 (echo %b%) else (
  12. if %n% equ 3 (echo %c%) else (
  13. if %n% equ 4 (echo %d%) else (
  14. if %n% equ 5 (echo %e%) else (
  15. if %n% equ 6 (echo %f%) else (
  16. if %n% equ 7 (echo %g%) else exit ))))))
  17. pause >nul
复制代码

作者: wangqi0077    时间: 2010-9-9 13:53

原帖由 poxi 于 2010-7-18 19:48 发表
答:
@echo off
set str=一二三四五六日
set /a ran=%random%%%7
call set day=%%str:~%ran%,1%%
echo 周%day%
pause


效果:
2725

================
这个应该很好懂吧.....没用for 因为不太会 = =! ...


这位兄台写的用截取啊..高人..高.学习了.
作者: wangqi0077    时间: 2010-9-9 14:04

原帖由 XBATI 于 2008-12-28 21:51 发表
set /a num=%random%%%7 这句请从各个角度帮我分析下


这个%random%是批处理中.取随机数的意思.任意数除以7 余数都只会是 0-6 所以就可以用这来取7个数了..大该就是这样.
作者: vincentzhou    时间: 2010-12-31 23:33

  1. @echo off
  2. set /a a=%random%%%7+1
  3. for /f "tokens=%a%" %%b in ('more +4 "%~nx0"') do echo %%b
  4. pause>nul&exit
  5. 周一 周二 周三 周四 周五 周六 周日
复制代码

[ 本帖最后由 vincentzhou 于 2010-12-31 23:41 编辑 ]
作者: weichenxiehou    时间: 2011-1-4 16:37

@echo off
setlocal enabledelayedexpansion
set str=一二三四五六日
set /a num=%random%%%7
echo 周!str:~%num%,1!
pause
作者: we6540    时间: 2011-1-30 20:10

@echo off
setlocal enabledelayedexpansion
set a=一二三四五六日
set /a b=%random%%%7
set c=!a:~%b%,1!
echo 周%c%
pause
作者: common    时间: 2011-6-14 21:14

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :1
  4. set a=%random%
  5. set b=%a:~2,1%
  6. if !b! equ 0 echo 星期一
  7. if !b! equ 1 echo 星期二
  8. if !b! equ 2 echo 星期三
  9. if !b! equ 3 echo 星期四
  10. if !b! equ 4 echo 星期五
  11. if !b! equ 5 echo 星期六
  12. if !b! equ 6 echo 星期日
  13. if !b! gtr 6 goto :1
  14. pause
复制代码
看到好方法都有人用了,用个能实现,但很复杂的方法参与下
作者: chris521crystal    时间: 2011-6-20 21:09

  1. @echo off&setlocal enabledelayedexpansion
  2. set /a xq=%random%%%7+1
  3. set  "xq_1=%xq:1=一%"
  4. set  "xq_2=%xq:2=二%"
  5. set  "xq_3=%xq:3=三%"
  6. set  "xq_4=%xq:4=四%"
  7. set  "xq_5=%xq:5=五%"
  8. set  "xq_6=%xq:6=六%"
  9. set  "xq_7=%xq:7=七%"
  10. for %%i in (%xq%) do echo 星期!xq_%%i!
  11. pause>nul
复制代码
有点复杂!!!
作者: welllib    时间: 2011-6-23 10:59

本帖最后由 welllib 于 2011-6-23 11:15 编辑
  1. @echo off
  2. color 1a
  3. echo.===========================
  4. echo.
  5. echo. Random Number TO Weekday
  6. echo.
  7. echo.===========================
  8. :start
  9. echo.======================
  10. set /a rdn=%random% %% 7+1
  11. echo.%rdn%
  12. set wkd=Monday Tuesday Wednesday Thursday Friday Saturday Sunday
  13. for /f "tokens=%rdn% delims= " %%i in ("%wkd%") do (echo %%i)
  14. echo.======================
  15. set /p ch=Exit? (Choose "Y" to exit, Others to Try Again)
  16. if /i %ch%==Y (goto end) else (goto start)
复制代码

作者: welllib    时间: 2011-6-23 11:30

刚才看到前面有高手用ping 法的时间延迟,学了来用用
  1. @echo off
  2. color 1a
  3. echo.===========================
  4. echo.
  5. echo. Random Number TO Weekday
  6. echo.
  7. echo.===========================
  8. :start
  9. set /a rdn=%random% %% 7+1
  10. echo.%rdn%
  11. set wkd=Monday Tuesday Wednesday Thursday Friday Saturday Sunday
  12. for /f "tokens=%rdn% delims= " %%i in ("%wkd%") do (echo %%i)
  13. ping -n 2 127.0.0.1>nul
  14. goto start
复制代码

作者: mxxcgzxxx    时间: 2011-7-14 19:37

本帖最后由 mxxcgzxxx 于 2011-7-15 16:16 编辑

每天一小练来个新思路
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set a=0
  4. for %%1 in (一 二 三 四 五 六 日) do (set 周%%1=!a!  )&(set /a a+=1)
  5. set /a b=%random%%%7
  6. set 周|findstr "%b%"
  7. pause>nul
  8. %0 2>nul
复制代码

作者: Hello123World    时间: 2011-7-17 13:14

1# wxcute
  1. @echo off
  2. Set /a a=%Random%%%6
  3. If %a%==0 (Echo 星期日) Else (Echo 星期%a%)
  4. pause
复制代码

作者: Hello123World    时间: 2011-7-17 13:37

77# mxxcgzxxx
算法很妙,不过
  1. set a=0
  2. for %%1 in (一 二 三 四 五 六 日) do (set 周%%1=!a!  )&(set /a a+=1)
复制代码
这句说明 周一对应的是 0
依此类推,周日对应的就是 6 。

%Random%%%7算出来应该是 0-7 ,8个数
所以按你的算法 %Random%%%6即可。

本来是来找茬的,没想到也给自己找出问题来了,  是什么我还不明白,呵呵。
作者: zxd11097    时间: 2011-7-24 07:53

  1. @echo off
  2. :xx
  3. set/a "a=%random%%%7 +1"
  4. if %a% equ 7 (echo 星期日) else echo 星期%a%
  5. pause&goto xx
复制代码

作者: mxxcgzxxx    时间: 2011-7-24 09:13

本帖最后由 mxxcgzxxx 于 2011-7-24 09:14 编辑
mxxcgzxxx
算法很妙,不过这句说明 周一对应的是 0
依此类推,周日对应的就是 6 。

%Random%% ...
Hello123World 发表于 2011-7-17 13:37



    %%7是取余的意思,所以只能取到6,如果是7就整了所以是0

是退格符,就是会退一格,比如:
echo 3215    的结果显示:325
echo 3215    的结果显示:351
作者: scarcr    时间: 2011-8-4 10:28

回复 1# wxcute
我尝试着写了下,
运行一下还是可以的。
大家看看中不中。
  1. @echo off
  2. set "day=日一二三四五六"
  3. set /a nu=%random% %% 7
  4. call echo 星期%%day:~%nu%,1%%
  5. pause>nul
复制代码

作者: birdsdeng    时间: 2011-9-15 01:00

请问下这段:%random%%%7+1是神马意思?我知道%random%是代表随即变量,但是不知道%%7+1是什么意思?
作者: bat爱好者    时间: 2013-1-13 21:09

回复 15# lhjoanna


    为什么要用call?起到了什么作用
作者: Enterpaise    时间: 2013-1-16 16:12

本帖最后由 Enterpaise 于 2013-1-16 16:14 编辑

在这里试了半天的延迟变量应用~ 终于试出来了~
  1. @echo off & setlocal enabledelayedexpansion
  2. set rcd=日一二三四五六
  3. set var=
  4. set /a var=%random%%%7
  5. echo 周!rcd:~%var%,1!
  6. pause>nul
复制代码

作者: Clarkky    时间: 2013-1-27 23:29

  1. @echo off
  2. :begin
  3. set day=%random%
  4. set day=%random:~0,1%
  5. if %day%==1 echo 周一
  6. if %day%==2 echo 周二
  7. if %day%==3 echo 周三
  8. if %day%==4 echo 周四
  9. if %day%==5 echo 周五
  10. if %day%==6 echo 周六
  11. if %day%==7 echo 周日
  12. if %day%==8 goto begin
  13. if %day%==9 goto begin
  14. if %day%==0 goto begin
  15. pause>nul
复制代码

作者: skynjupt    时间: 2013-4-25 12:43

  1. ::批处理随机显示星期几
  2. @echo off&chcp 936>nul
  3. set "weeks=星期一 星期二 星期三 星期四 星期五 星期六 星期日"
  4. set /a week_of=%random% %% 7 + 1
  5. for /f "tokens=%week_of%" %%i in ("%weeks%") do echo %%i
  6. pause
  7. %0
复制代码

作者: Jay罗小尼    时间: 2013-8-5 15:45

  1. @echo off
  2. set "str=12345670"
  3. set /a num=%random%%%7+1
  4. call echo week%%str:~%num%,1%%
  5. pause
复制代码
不知道怎么cmd显示不了汉子,就这样写了
作者: wy9264    时间: 2013-10-8 19:42

  1. @echo off
  2. :redo
  3. set a=%random%
  4. if %a% leq 1 goto redo
  5. if %a% gtr 8 goto redo
  6. echo 星期%a%
  7. pause>nul
复制代码

作者: lifei259    时间: 2013-11-30 12:33

  1. @echo off
  2. set "code=一 二 三 四 五 六 日"
  3. set /a "n=%random%%%7+1"
  4. for /f "tokens=%n%" %%i in ("%code%") do (echo.周%%i)
  5. ping 127.1 -n 3 1>nul
  6. %0
复制代码

作者: battab    时间: 2013-12-9 16:45

本帖最后由 battab 于 2013-12-9 16:46 编辑
  1. @echo off
  2. :f
  3. set /a a=%random%%%7
  4. set str=日一二三四五六
  5. call echo 星期%%str:~%a%,1%%
  6. set /p q=继续(C):
  7. echo %q%
  8. if "%q%"=="c" goto f
  9. pause
复制代码
  1. @echo off
  2. :f
  3. set q=
  4. set /a a=%random%%%7
  5. set str=日一二三四五六
  6. call echo 星期%%str:~%a%,1%%
  7. set /p q=继续(C):
  8. if "%q%"=="c" goto f
  9. pause
复制代码
练手的时候发现:第一段代码按C继续时,第二次直接按回车会默认输入C而进入循环。
                        本意是想输入C可以继续,其它键一律退出的。
                        为达到目的,于是有了第二段代码。
                        我想这是一个声明变量的好例子吧。
                        写出来分享!
作者: 章伯魂    时间: 2014-3-14 13:15

@echo off
set /a t=%random% %% 7
if %t%==0 echo 周一 
if %t%==1 echo 周二 
if %t%==2 echo 周三 
if %t%==3 echo 周四 
if %t%==4 echo 周五 
if %t%==5 echo 周六 
if %t%==6 echo 周日
pause
作者: change.tsai    时间: 2014-4-18 19:49

  1. @echo off
  2. set "code=周一 周二 周三 周四 周五 周六 周日"
  3. :loop
  4. set /a rdm=%random%%%7+1
  5. for /f "tokens=%rdm% delims= " %%i in ("%code%") do (
  6. echo %%i
  7. )
  8. pause>nul
  9. goto :loop
复制代码

作者: change.tsai    时间: 2014-4-18 19:49

  1. @echo off
  2. set "code=周一 周二 周三 周四 周五 周六 周日"
  3. :loop
  4. set /a rdm=%random%%%7+1
  5. set /a rdm1=rdm*3
  6. call echo %%code:~%rdm1%,2%%
  7. pause>nul
  8. goto :loop
复制代码

作者: shelluserwlb    时间: 2014-11-9 16:35

  1. @echo off
  2. setlocal
  3. set a1=一 & set a2=二 & set a3=三
  4. set a4=四 & set a5=五 & set a6=六 & set a7=日
  5. set /a b=%random%%%7+1
  6. call echo 星期%%a%b%%%
  7. endlocal
  8. pause
复制代码

作者: 慕夜蓝化    时间: 2014-12-27 12:18

@echo off
set "week=周一 周二 周三 周四  周五 周六 周日"
call :w %week%
:w
for /f "delims=" %%i in ('set /a %random%%%8') do (
    if %%i neq 0 call echo,%%%%i&pause>nul
)
goto :w
这个。也可以使用goto :label and :loop 来代替for循环。
作者: clsgalmc    时间: 2015-5-7 22:43

懂了点!!@!!
作者: 胖奇4BAT    时间: 2016-4-24 16:56

@echo off
set /a n=%random% %%7 +1
if %n%==1 echo 周一
if %n%==2 echo 周二
if %n%==3 echo 周三
if %n%==4 echo 周四
if %n%==5 echo 周五
if %n%==6 echo 周六
if %n%==7 echo 周日
pause
作者: taofan712    时间: 2017-2-28 09:52

  1. @echo off
  2. :loop
  3. set /a day=%random%%%7+1
  4. for /f "tokens=%day% delims= " %%a in ("一 二 三 四 五 六 日") do echo; 星期%%a&pause>nul&goto loop
复制代码

作者: 13510184899    时间: 2018-5-15 16:04

::一周有七天
::周一 周二 周三 周四 周五 周六 周日
::利用随机数随机显示一天,开始可以用阿拉伯数字,但最终显示时要用汉字 ^_^
@echo off
set /a n=%random% %% 7
if %n%==0 echo 星期一
if %n%==1 echo 星期二
if %n%==2 echo 星期三
if %n%==3 echo 星期四
if %n%==4 echo 星期五
if %n%==5 echo 星期六
if %n%==6 echo 星期七
pause>nul
%0
::按一下变一个
作者: tigerpower    时间: 2018-5-16 07:24

本帖最后由 tigerpower 于 2018-5-16 07:27 编辑
  1. powershell -c "$lc=[Globalization.CultureInfo]'zh-CN';(Get-Date).AddDays((random 7)).ToString('dddd',$lc)"
复制代码
试试将zh-CN替换为en-US或ja-JP




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2