版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangpengzp/article/details/88185133
1、获得系统当前时间
::获得日期 %date:~0,4%表示获得date的第0个起的四个字符
echo %data%
set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
echo %CURRENT_DATE%
::获得星期
set week=%date:~11%
echo %week%
::获得时间
set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%
set hour=%time:~0,2%
set minute=%time:~3,2%
echo %CURRENT_TIME%
2、if 判断
note:注意bat文件编码与window系统的编码一致性
if %week%==周日 (
echo 今天周末
)
3、变量的定义,和修改,有的博客资料中说要加SETLOCAL ENABLEDELAYEDEXPANSION ,这样在执行时候会重新加载环境变量。但我在win10上测试不加也可以。但出现了一个特别的存在,见后面的demo,修改后第一次还是原来数据,第二次进入循环才正确读取。
@echo off
set isSingle_am=0
echo %isSingle_am%
set isSingle_am=1
echo %isSingle_am%
pause
执行如图:
4 、随机数
下例:随机出[1,10]的随机数
set num=%random%
set /a num=num%%10+1
echo %num%
5、定时操作
调用下面代码:延时2秒
choice /t 2 /d y /n >nul
6、无线循环操作,for循环我没仔细研究,
这里用到的模式如下:
:start
....
go start
下面是我写的一个打卡 demo,但不清楚为何 变量修改后,反应不及时,仍然打印的是原来数字,第二次循环打印的才是修改后的:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set isSingle_am=0
set isSingle_pm=0
set num=%random%
set /a num=num%%10+1
echo %num%
:start
::获得日期
::set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
::echo %CURRENT_DATE%
::获得星期
::set week=%date:~11%
::echo %week%
::获得时间
::set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%
::set hour=%time:~0,2%
::set minute=%time:~3,2%
::echo %CURRENT_TIME%
if %date:~11%==周日 (
echo 今天周末
)
if %date:~11%==周六 (
echo 今天周末
) else (
echo 今天工作日
if %time:~0,2%==8 (
if %time:~3,2% GTR 45+num (
if %isSingle_am%==0 (
echo 打早卡
choice /t 1 /d y /n >nul
set isSingle_am=1
echo 打早卡%num%
choice /t 2 /d y /n >nul
) else (
echo 已经打过早卡
)
)
)
if %time:~0,2%==16 (
if %time:~3,2% GTR 0+num (
echo 打晚卡
if %isSingle_pm%==0 (
choice /t 1 /d y /n >nul
set isSingle_pm=1
echo 打晚卡%isSingle_pm%
choice /t 2 /d y /n >nul
) else (
echo 已经打过晚卡
)
)
)
)
choice /t 20 /d y /n >nul
goto start
pause
执行结果如下:
当前时间是16点,执行的打晚卡,执行了
set isSingle_pm=1
echo 打晚卡%isSingle_pm%
后打印的仍然 isSingle_pm为0.但第二次进入循环的时候判断if %isSingle_pm%==0 没有通过,就是说第二次读取的时候set isSingle_pm=1(现在小弟仍然不清楚为什么,SETLOCAL ENABLEDELAYEDEXPANSION 加不加结果一样,望熟悉的人bat 语言的大神指正下)。