第二天的Windows批处理事件提醒

前端之家收集整理的这篇文章主要介绍了第二天的Windows批处理事件提醒前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何编写批处理脚本,该脚本将搜索此格式的Dates.txt文件

EventName1:dd.mm.yyyy

EventName2:dd.mm.yyyy

EventNameN:dd.mm.yyyy

对于明天日期的活动,如果找到,请通知用户他们?

我能够为今天的活动编写一个脚本:

  1. @echo off
  2.  
  3. setlocal disableDelayedExpansion
  4.  
  5. IF NOT EXIST Dates.txt GOTO not_found_dates
  6.  
  7. for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
  8. set ldt=%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4%
  9. echo Today: %ldt%
  10.  
  11.  
  12.  
  13. for /f "tokens=1,2 delims=:" %%A in (Dates.txt) do (
  14. if "%%B"==" %ldt%" echo You have %%Atoday!
  15. )
  16.  
  17. GOTO:EOF
  18.  
  19.  
  20. :not_found_dates
  21. echo Dates.txt not found!
  22. GOTO:EOF

但我无法弄清楚如何找到明天的日期来将其与文件中的日期进行比较.

一些帮助将不胜感激!

@H_301_22@ 好吧,我终于想到了自己!
  1. @echo off
  2.  
  3. setlocal DisableDelayedExpansion
  4.  
  5. if not exist Dates.txt goto not_found_dates
  6.  
  7. for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
  8. set d=%ldt:~6,2%
  9. set m=%ldt:~4,2%
  10. set y=%ldt:~0,4%
  11. set ldt=%d%.%m%.%y%
  12.  
  13. echo ************************
  14. echo * Today: %ldt% *
  15.  
  16. :loop
  17. set /a d=1%d%-99
  18.  
  19. if %d% gtr 31 (
  20. set d=1
  21. set /a m=1%m%-99
  22.  
  23. if %m% gtr 12 (
  24. set m=1
  25. set /a y+=1
  26. )
  27. )
  28. xcopy /d:%m%-%d%-%y% /l . .. >nul 2>&1 || goto loop
  29.  
  30. set td=0%d%
  31. set td=%td:~-2%
  32. set tm=0%m%
  33. set tm=%tm:~-2%
  34. set ty=%y%
  35.  
  36. set tomorrow=%td%.%tm%.%ty%
  37.  
  38. echo * Tomorrow: %tomorrow% *
  39. echo ************************
  40.  
  41. for /f "tokens=1,2 delims=:" %%A in (Dates.txt) do (
  42. if "%%B"==" %tomorrow%" echo # You have %%Atomorrow!
  43. )
  44.  
  45. goto :EOF
  46.  
  47. :not_found_dates
  48. echo Dates.txt not found!
  49. goto :EOF

它适用于Dates.txt文件,该文件使用以下格式的日期:

EventName1:31.05.2016
EventName2:30.05.2016
EventName3:31.05.2016
EventName4:01.06.2016
EventName5:31.05.2016
EventName6:02.06.2016
EventName7:01.06.2016

(不应该忘记冒号前后的单个空格,以及小于10的天和月的前导零.)

更新:

首先,设置/ a d = 1会增加一天.

然后,这一行:

  1. xcopy /d:%m%-%d%-%y% /l . .. >nul 2>&1 || goto loop

检查由set / a d = 1 part形成的日期是否实际存在于日历中.如果形成的日期不存在,它只是“跳过”日期,移动到循环的开头再添加一天.这样,不存在的日期不能设置为明天的日期.

if%d%gtr 31(部分没有做任何事情,除非它实际上是今天的第31天.

所以,尽管if%d%gtr 31(看起来有点令人困惑的部分,这段代码仍然适用于少于31天的月份.

要更好地理解它,请打开@echo并跟踪日期值中的更改.

例如,如果我们使用:

  1. set d=30
  2. set m=04
  3. set y=2016

输出是:

  1. ************************
  2. * Today: 30.04.2016 *
  3. * Tomorrow: 01.05.2016 *
  4. ************************

另外,对于:

  1. set d=28
  2. set m=02
  3. set y=2015

输出

  1. ************************
  2. * Today: 28.02.2015 *
  3. * Tomorrow: 01.03.2015 *
  4. ************************

猜你在找的Windows相关文章