类似Java、Js等编程语言都有时间戳函数,可返回距离1970-1-1 00:00:00的秒数或豪秒数,调用起来比较方便。windos bat脚本没有时间戳函数,只能通过日期、时间进行手工计算,实现起来比较复杂,具体如下:
windows bat批处理脚本 字符串截取、拼接、查找等使用说明
vtimestramp.bat
- @echo off & setlocal
- set vdate=%~1
- set vtime=%~2
- if not defined vdate (set vdate=%date%)
- if not defined vtime (set vtime=%time%)
- call :calcSeconds %vdate:~0,10% %vtime% secs
- echo %secs%
- goto :eof
-
- :calcSeconds
- set vdate=%~1
- set vtime=%~2
- set yy=%vdate:~0,4% & set mm=%vdate:~5,2% & set dd=%vdate:~8,2%
- rem 02=>2
- set /a dd=100%dd%%%100, mm=100%mm%%%100
- rem 1970年01月01日 天数计算
- set /a mm-=2
- if %mm% LEQ 0 (
- set /a mm+=12
- set /a yy-=1
- )
- set /a days=%yy%/4 - %yy%/100 + %yy%/400 + 367*%mm%/12 + %dd% + %yy%*365 - 719499
-
- rem 9:10:12=>09:10:12
- if "%vtime:~1,1%" == ":" (set "vtime=0%vtime%")
- set hh=%vtime:~0,2% & set nn=%vtime:~3,2% & set ss=%vtime:~6,2%
-
- rem 09=>9
- set /a hh=100%hh%%%100, nn=100%nn%%%100, ss=100%ss%%%100
-
- rem 1970年01月01日 00:00:00, 秒数计算,8个小时时差
- set /a secs=days*86400 + hh*3600 + nn*60 + ss - 8 * 60 * 60
- set "%3=%secs%"
- goto :EOF
-
没有参数默认当前日期、当前时间
- D:\cmdtest\lianxi>vtimestamp.bat
- 1581993427
-
指定日期、时间
- D:\cmdtest\lianxi>vtimestamp.bat 2020-03-18 10:10:10
- 1584497410
-
bat脚本函数返回值有2种实现方式:
1)全局变量,最简单,变量赋值、读取即可;
2)类似参数引用,高级语言常见的一种函数结果返回方式:修改函数参数,bat脚本实现参数返回注意事项:
调用时指定参数名:
call :calcSeconds %vdate:~0,10% %vtime% secs
函数中修改该参数值:
set “%3=%secs%”
调用结束,读取参数%secs%
echo %secs%