类似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%