1,因为时间格式为17:55:20.03或9:55:20.03,所以不能使用截取,那就要用for /f解析。
for /f "tokens=1,2 delims=:" %%i in ("%time%") do
解析%time%,并以:作分隔符。这样%time%将被分成3部分,依次是小时、分和秒。因为只要求精确到分,所以只取小时和分就可以,即tokens=1,2,变量为%%i、%%j。
2,%date%为日期,例如格式:2010-03-28 星期日或2010-03-31 星期三。这里我们只用到最后一个字符,为“日一二三四五六”中的某一个。但这些字符不能直接参与比较,需要转换。
for /l %%k in (1,1,7) do if "!H:~%%k,1!"=="%date:~13,1%" echo %%k
%%k从1到7进行for /l迭代,所以!H:~%%k,1!实际就是!H:~1,1!到!H:~7,1!,即截取变量H的第2到第8个字符。因为set H=寒一二三四五六日夜孤星,所以也就依次是“一二三四五六日”,这个字符与%date:~13,1%截取的星期字符比较,相同时,%%k就是星期的数字,即“1234567”中对应的某一个。
3,“与”比较:连续if比较,即满足各个if的所有条件后,才执行命令start %SystemRoot%\system32\mspaint.exe。
分开写就是:
@echo off&setlocal enabledelayedexpansion
set H=寒一二三四五六日夜孤星
for /f "tokens=1,2 delims=:" %%i in ("%time%") do (
for /l %%k in (1,1,7) do (
if "!H:~%%k,1!"=="%date:~13,1%" if %%k leq 4 if %%k geq 1 if %%i%%j leq 1700 if %%i%%j geq 1400 start %SystemRoot%\system32\mspaint.exe
)
)