如何编写批处理脚本,该脚本将搜索此格式的Dates.txt文件:
@H_301_22@
好吧,我终于想到了自己!
EventName1:dd.mm.yyyy
EventName2:dd.mm.yyyy
…
EventNameN:dd.mm.yyyy
我能够为今天的活动编写一个脚本:
- @echo off
- setlocal disableDelayedExpansion
- IF NOT EXIST Dates.txt GOTO not_found_dates
- for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
- set ldt=%ldt:~6,2%.%ldt:~4,2%.%ldt:~0,4%
- echo Today: %ldt%
- for /f "tokens=1,2 delims=:" %%A in (Dates.txt) do (
- if "%%B"==" %ldt%" echo You have %%Atoday!
- )
- GOTO:EOF
- :not_found_dates
- echo Dates.txt not found!
- GOTO:EOF
但我无法弄清楚如何找到明天的日期来将其与文件中的日期进行比较.
一些帮助将不胜感激!
- @echo off
- setlocal DisableDelayedExpansion
- if not exist Dates.txt goto not_found_dates
- for /F "usebackq tokens=1,2 delims==" %%i in (`wmic os get LocalDateTime /VALUE 2^>NUL`) do if '.%%i.'=='.LocalDateTime.' set ldt=%%j
- set d=%ldt:~6,2%
- set m=%ldt:~4,2%
- set y=%ldt:~0,4%
- set ldt=%d%.%m%.%y%
- echo ************************
- echo * Today: %ldt% *
- :loop
- set /a d=1%d%-99
- if %d% gtr 31 (
- set d=1
- set /a m=1%m%-99
- if %m% gtr 12 (
- set m=1
- set /a y+=1
- )
- )
- xcopy /d:%m%-%d%-%y% /l . .. >nul 2>&1 || goto loop
- set td=0%d%
- set td=%td:~-2%
- set tm=0%m%
- set tm=%tm:~-2%
- set ty=%y%
- set tomorrow=%td%.%tm%.%ty%
- echo * Tomorrow: %tomorrow% *
- echo ************************
- for /f "tokens=1,2 delims=:" %%A in (Dates.txt) do (
- if "%%B"==" %tomorrow%" echo # You have %%Atomorrow!
- )
- goto :EOF
- :not_found_dates
- echo Dates.txt not found!
- goto :EOF
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会增加一天.
然后,这一行:
- 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并跟踪日期值中的更改.
例如,如果我们使用:
- set d=30
- set m=04
- set y=2016
输出是:
- ************************
- * Today: 30.04.2016 *
- * Tomorrow: 01.05.2016 *
- ************************
另外,对于:
- set d=28
- set m=02
- set y=2015
输出:
- ************************
- * Today: 28.02.2015 *
- * Tomorrow: 01.03.2015 *
- ************************