Windows批处理:获取时间变量
1、获得系统当前时间
1.
::获得⽇期 %date:~0,4%表⽰获得date的第0个起的四个字符
2.
echo %data%
3.
set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
4.
echo %CURRENT_DATE%
5.
:
:获得星期
6.
set week=%date:~11%
7.
echo %week%
8.
::获得时间
9.
set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%
10.
set hour=%time:~0,2%
11.
set minute=%time:~3,2%
12.
echo %CURRENT_TIME%
2、if 判断
note:注意bat⽂件编码与window系统的编码⼀致性
1.
if %week%==周⽇ (
2.
echo 今天周末
3.
)
3、变量的定义,和修改,有的博客资料中说要加SETLOCAL ENABLEDELAYEDEXPANSION ,这样在执⾏时候会重新加载环境变量。但我在win10上测试不加也可以。但出现了⼀个特别的存在,见后⾯的demo,修改后第⼀次还是原来数据,第⼆次进⼊循环才正确读取。1.
@echo off
2.
set isSingle_am=0
3.
echo %isSingle_am%
4.
set isSingle_am=1
5.
echo %isSingle_am%
6.
pause
执⾏如图:
4 、随机数
下例:随机出[1,10]的随机数
set num=%random%
2.
set /a num=num%%10+1
3.
echo %num%
5、定时操作
调⽤下⾯代码:延时2秒
choice /t 2 /d y /n >nul
6、⽆线循环操作,for循环我没仔细研究,
这⾥⽤到的模式如下:
1.
:start
2.
3.
....
4.
5.
go start
下⾯是我写的⼀个打卡 demo,但不清楚为何变量修改后,反应不及时,仍然打印的是原来数字,第⼆次循环打印的才是修改后的:1.
@echo off
2.
SETLOCAL ENABLEDELAYEDEXPANSION
3.
set isSingle_am=0
4.批处理文件注释
set isSingle_pm=0
5.
set num=%random%
6.
set /a num=num%%10+1
7.
echo %num%
8.
:start
9.
10.
11.
:
:获得⽇期
12.
::set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
13.
::echo %CURRENT_DATE%
14.
::获得星期
15.
::set week=%date:~11%
16.
::echo %week%
17.
::获得时间
18.
::set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%
19.
::set hour=%time:~0,2%
20.
::set minute=%time:~3,2%
::echo %CURRENT_TIME%
23.
24.
25.
26.
if %date:~11%==周⽇ (
27.
echo 今天周末
28.
)
29.
if %date:~11%==周六 (
30.
echo 今天周末
31.
) else (
32.
33.
echo 今天⼯作⽇
34.
35.
if %time:~0,2%==8 (
36.
37.
if %time:~3,2% GTR 45+num (
38.
39.
if %isSingle_am%==0 (
40.
echo 打早卡
41.
choice /t 1 /d y /n >nul
42.
set isSingle_am=1
43.
echo 打早卡%num%
44.
choice /t 2 /d y /n >nul
45.
) else (
46.
echo 已经打过早卡
47.
)
48.
)
49.
)
50.
51.
if %time:~0,2%==16 (
52.
if %time:~3,2% GTR 0+num ( 53.
echo 打晚卡
54.
if %isSingle_pm%==0 (
choice /t 1 /d y /n >nul
57.
set isSingle_pm=1
58.
echo 打晚卡%isSingle_pm%
59.
choice /t 2 /d y /n >nul
60.
) else (
61.
echo 已经打过晚卡
62.
)
63.
64.
)
65.
)
66.
67.
)
68.
69.
choice /t 20 /d y /n >nul
70.
71.
goto start
72.
73.
74.
pause
执⾏结果如下:
当前时间是16点,执⾏的打晚卡,执⾏了
1.
set isSingle_pm=1
2.
echo 打晚卡%isSingle_pm%
后打印的仍然 isSingle_pm为0.但第⼆次进⼊循环的时候判断if %isSingle_pm%==0 没有通过,就是说第⼆次读取的时候set
isSingle_pm=1(现在⼩弟仍然不清楚为什么,SETLOCAL ENABLEDELAYEDEXPANSION 加不加结果⼀样,望熟悉的⼈bat 语⾔的⼤神
指正下)。
批处理语法整理:
1、echo 和 @
@ 隐藏他后⾯的这⼀⾏的命令本⾝(只能影响当前⾏)
echo off ::从下⼀⾏开始关闭回显
@echo off 从本⾏开始关闭回显,⼀般批处理第⼀⾏都是这个
echo 显⽰当前⾏是echo off 状态还是echo on 状态
echo. 输出⼀个“回车换⾏”,空⽩⾏
2、窗⼝设置
title 设置cmd窗⼝的标题
title 新标题
ver 显⽰系统版本
3、pause 暂停命令
让当前进程的暂停⼀下,并显⽰:请按任意键继续. . . ⽤>nul 把这个信息隐藏echo 当需要改变提醒的内容时。。。
pause >nul
4、goto 和:跳转命令
:label ⾏⾸为:表⽰该⾏是标签⾏,标签⾏不执⾏操作
goto label 跳转到指定的标签那⼀⾏
5、:: 或者REM 注释
::后的字符在执⾏是不会回显,⽆论echo on 是否打开,REM 在echo on是会回显6、set 设置变量
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论