据我所知,Batch没有提供UNIX时间的命令。我能找到的最接近的是%time%
,它只显示时间戳。
批处理中是否有一个命令或一组命令可以获得UNIX时间?
答案 0 :(得分:18)
那里有Richie Lawrence's batch library所有那些漂亮的方便脚本。您需要的是DateToSec(使用GetDate和GetTime)。
这是一个简化的脚本,使用了一点WMI:
@echo off
setlocal
call :GetUnixTime UNIX_TIME
echo %UNIX_TIME% seconds have elapsed since 1970-01-01 00:00:00
goto :EOF
:GetUnixTime
setlocal enableextensions
for /f %%x in ('wmic path win32_utctime get /format:list ^| 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
endlocal & set "%1=%ut%" & goto :EOF
结果将返回到传递给GetUnixTime
的第一个参数,即%UNIX_TIME%
例如:
1341791426 seconds have elapsed since 1970-01-01 00:00:00
希望它有所帮助!
答案 1 :(得分:5)
创建名为" getUtime.bat"
的.bat文件@echo off
echo WScript.Echo(new Date().getTime()); > %temp%\time.js
cscript //nologo %temp%\time.js
del %temp%\time.js
并像这样打电话
"C:\>getUTime"
1430894237616
答案 2 :(得分:2)
返回UNIX时间戳的简单1行长C程序怎么样?您可以在批处理脚本中从%errorlevel%中检索值。
#include <stdio.h>
#include <time.h>
int main(void)
{
return (int) time(NULL);
}
在我的测试命令提示符下工作:
C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel%
1419609373
C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp%
1419609373
答案 3 :(得分:0)
没有用于返回UNIX时间的批处理命令。您唯一的选择是编写一个可以从返回UNIX时间的批处理文件运行的程序,或者您可以使用Windows PowerShell。
答案 4 :(得分:0)
到目前为止,最好的解决方案是下载一个独立的date.exe unix-port。
建议您将其重命名为unixdate.exe,以避免与MS Date命令冲突。
从here
获取示例:
((PROMPT)):unixdate +%Y%M%d
20141704
((PROMPT)):unixdate +%Y%b%d
2014Sep04
答案 5 :(得分:0)
有一种非常简单的方法可以在单个批处理文件中执行此操作,无需外部脚本、文件、库等。
<!-- :
for /f "tokens=* usebackq" %%a in (`start /b cscript //nologo "%~f0?.wsf"`) do (set timestamp=%%a)
echo %timestamp%
pause
exit /b
-->
<job><script language="JavaScript">
WScript.Echo(new Date().getTime());
</script></job>
它的工作方式是,批处理脚本的代码和 JS 文件的代码包含在同一个 .cmd
或 .bat
文件中。您可以通过注释掉批处理代码来强制 cscript 将批处理文件作为脚本运行,第一行后面的 :
表示批处理将忽略它并直接运行批处理代码。就这样吧!