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

[日期时间] 批处理如何按指定数量生成在指定时间范围内随机不重复的时间点

单位签到机坏了,上级单位要求不能中断上报签到信息
求助能生成签到 文件的批处理

求生成 每天4次的签到文本
时间区间分别是:7:30-8:30
11:30-12:30
14:00-14:30
17:30-18:00
要求时间是顺序的 人员出现是随机不重复的
1

评分人数

本帖最后由 taofan712 于 2018-5-31 23:18 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :LOOP
  4. set/a H=8+%random%%%2
  5. if %H% equ 8 (set/a M=30+%random%%%30) else (set/a M=%random%%%31)
  6. set/a S=%random%%%60,MS=%random%%%60
  7. CALL :help %H% %M% %S% %MS%
  8. set/a H=11+%random%%%2
  9. if %H% equ 11 (set/a M=30+%random%%%30) else (set/a M=%random%%%31)
  10. set/a S=%random%%%60,MS=%random%%%60
  11. CALL :help %H% %M% %S% %MS%
  12. set/a H=14
  13. set/a M=%random%%%30,S=%random%%%60,MS=%random%%%60
  14. CALL :help %H% %M% %S% %MS%
  15. set/a H=17+%random%%%2
  16. if %H% equ 17 (set/a M=30+%random%%%30) else (set/a M=%random%%%31)
  17. set/a S=%random%%%60,MS=%random%%%60
  18. CALL :help %H% %M% %S% %MS%
  19. PAUSE
  20. GOTO LOOP
  21. :help
  22. set/a n=0
  23. for %%a in (%1 %2 %3 %4) do (
  24.     set var=00%%a:
  25.     set/a n+=1
  26.     if !n! equ 4 (set var=!var:~-3,-1!) else (set var=!var:~-3!)
  27.     set/p tp=!var!<nul
  28. )
  29. echo;
  30. :eof
复制代码
啧啧啧,挺有意思的一个题目,我却没有巧妙思路,也是无趣。

TOP

  1. #python生成随机时间段
  2. #2016年12月6日18:34:26 codegay
  3. #参考资料 http://www.runoob.com/python/python-date-time.html
  4. #Python 取一个时间段里面的时间 https://segmentfault.com/q/1010000006617581
  5. import time
  6. import random
  7. st = "2016-12-6 18:40:36"
  8. et = "2016-12-16 18:40:44"
  9. tf = "%Y-%m-%d %H:%M:%S"
  10. name = """11
  11. 22
  12. 33
  13. 44
  14. 狗三
  15. 猫4
  16. 猪八"""
  17. namelist = name.splitlines()
  18. count = len(namelist)
  19. print(namelist)
  20. def random_time(st,et,count=1):
  21.     start = int(time.mktime(time.strptime(st,tf)))
  22.     end = int(time.mktime(time.strptime(et,tf)))
  23.     mktime =  random.sample(range(start,end),count)
  24.     strtime = [time.strftime(tf,time.localtime(r)) for r in sorted(mktime)]
  25.     return strtime
  26. result = random_time(st,et,count)
  27. random.shuffle(namelist)#打乱名单的顺序
  28. for t in zip(result,namelist):
  29.     print(*t)
  30. """
  31. 输出:
  32. ['11', '22', '33', '44', '狗三', '猫4', '猪八']
  33. 2016-12-08 04:00:26 33
  34. 2016-12-09 11:16:06 猪八
  35. 2016-12-12 08:13:51 狗三
  36. 2016-12-12 11:57:52 猫4
  37. 2016-12-12 12:56:37 11
  38. 2016-12-12 22:20:52 44
  39. 2016-12-16 02:47:04 22
  40. """
复制代码
1

评分人数

去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 14# tuquan


    需要单独安装PowerShell才行

TOP

直接简单做一个签到机不就行了,还这么麻烦

TOP

回复 3# pcl_test


    不好意思 我再多问一句 第二段代码可不可以在XP系统(安装程序或补丁)下运行
单位的电脑不让装WIN7及以上系统

TOP

回复 3# pcl_test


    第二段做了测试 可以实现了
谢谢版主大人
就是随机出来的第一个时间必然start=时间,不过问题不大 改一下初始时间就好了

TOP

回复 11# tuquan


    因为你排的是公式。。。。。

方法一:copy到一个文本文件,再copy回来
方法二:copy后,在excel中选择“选择性粘贴”-->"数值"

TOP

回复 10# flyinnet9


    一排序时间又变了

TOP

回复 7# tuquan


    排序不就好了,excel基本功能

TOP

回复 3# pcl_test


    不好意思 我这现在没有WIN7及以上系统的电脑 第二段还没做测试

TOP

回复 7# tuquan


    把时间先排个序,再用就可以了,即随机又递增。

TOP

回复 6# flyinnet9


    好像不可以的哦
这个生成的时间不是顺序递增的 倒是在区间内随机生成的
签到吗 肯定时间早的在前面

TOP

excel 函数 ="7:30"+RAND()*("8:30"-"7:30"),然后将单元格属性改为时间

想要多少个生成多少个,填到你的表里就好了

TOP

本帖最后由 pcl_test 于 2016-12-6 04:53 编辑

回复 4# tuquan
  1. @echo off&setlocal enabledelayedexpansion
  2. set start=07:30:00
  3. set end=08:30:00
  4. for /f "delims=" %%a in ('wmic path win32_operatingsystem get LocalDateTime /value ^| findstr "="') do set %%a
  5. set /a "a=(1%start:~,2%-100)*3600+(1%start:~3,2%-100)*60, b=(1%end:~,2%-100)*3600+(1%end:~3,2%-100)*60"
  6. for /f "tokens=1,2 delims==" %%a in ('more +22 "%~f0"') do set _%%a=%%b&set "#!random!_%%a=%%a"
  7. for /f "tokens=2 delims==" %%a in ('set #') do set /a n+=1&set #!n!=%%a
  8. set /a c=(b-a-2)/n
  9. (for /l %%i in (1 1 %n%) do (
  10.     set /a "r=!random!%%(c/2)+(c/2+1)"
  11.     for /f "tokens=1-3 delims=:" %%a in ("!start!") do (
  12.         set /a h=1%%a-100,m=1%%b-100,s=1%%c-100
  13.         for %%d in (s m h) do (
  14.             set /a "v=%%d,%%d=(%%d+r)%%60,r=(v+r)/60"
  15.         )
  16.        set /a h=100+h,m=100+m,s=100+s,i+=1
  17.        set start=!h:~-2!:!m:~-2!:!s:~-2!
  18.        set /p=time="%LocalDateTime:~0,4%-%LocalDateTime:~4,2%-%LocalDateTime:~6,2% !start!"
  19.        for %%j in (#!i!) do for %%k in (!%%j!) do echo; id="%%k" name="!_%%k!"
  20.     )
  21. ))<nul
  22. pause&exit
  23. 1=陈一
  24. 2=黄二
  25. 3=张三
  26. 4=李四
  27. 5=王五
  28. 6=赵六
  29. 7=钱七
  30. 8=孙八
  31. 9=杨九
  32. 10=吴十
复制代码

TOP

返回列表