window bat 获得时间,变量定义二次赋值,随机数,循环、判断

版权声明:本文为博主原创文章,未经博主允许不得转载。 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 语言的大神指正下)。

猜你喜欢

转载自blog.csdn.net/zhangpengzp/article/details/88185133