批处理中获取 unix 时间戳

By | 2016-06-11

直接贴最终代码

call :GetUnixTime _CUR_TIME
echo timestamp: %_CUR_TIME%

goto :EOF
:GetUnixTime
setlocal enableextensions
for /f %%x in ('wmic path win32_utctime get /format:list ^<nul ^| findstr "="') do (
    set %%x)
set /a z=(14-100%Month%%%100)/12, y=10000%Year%%%10000-z
set /a ut=y*365+y/4-y/100+y/400+(153*(100%Month%%%100+12*z-3)+2)/5+Day-719469
set /a ut=ut*86400+100%Hour%%%100*3600+100%Minute%%%100*60+100%Second%%%100
del /s/q TempWmicBatchFile.bat >nul 2>&1
endlocal & set "%1=%ut%" & goto :EOF

JJYY:

  • 批处理真是渣的不可思议, 不要妄想用 %DATE% %TIME% 之类的方式来获取, 这些和当前系统的语言区域有关
  • 请特别注意那个 ^<nul, 不加这个, 在某些情况下 wmic 命令会挂起,
    具体会挂起的条件不确定, 感觉是从其他进程调起 cmd.exe 再执行批处理的情况下就会出现
  • 还有那个奇葩的 TempWmicBatchFile.bat 文件, 股沟了一大圈实在不知道要怎么禁止丫生成,
    干脆再多个恶心的命令来删掉删掉好了

转载请注明来自: http://zsaber.com/blog/p/116

既然都来了, 有啥想法顺便留个言呗? (无奈小广告太多, 需审核, 见谅)

Category:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注