13

据我所知,Batch 没有提供 UNIX 时间的命令。我能找到的最接近的是%time%,它只显示时间戳。

批处理中是否有一个命令或一组命令可以用来获取 UNIX 时间?

4

6 回答 6

20

Richie Lawrence 的批处理库包含所有这些漂亮的方便脚本。您需要的是DateToSec(使用GetDateGetTime)。

这是一个简化的脚本,它使用了一点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

希望能帮助到你!

于 2012-07-08T19:14:19.997 回答
7

创建一个名为“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
于 2015-05-06T06:44:51.683 回答
3

返回 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
于 2014-12-26T16:00:15.460 回答
0

没有用于返回 UNIX 时间的批处理命令。您唯一的选择是编写一个可以从返回 UNIX 时间的批处理文件运行的程序,或者您可以使用 Windows PowerShell。

于 2012-07-08T17:21:59.677 回答
0

到目前为止,最好的解决方案是下载一个独立的 date.exe unix-port。

建议您将其重命名为 unixdate.exe,以避免与 MS Date 命令冲突。

这里获取

  1. 下载并解压。据我所知,所有实用程序都是“便携式”的,也就是说,它们不需要任何安装程序即可工作。我只用过几个(rm.exe & date.exe)。 此外,您可以重命名 exe,以防它们与您已有的其他系统实用程序匹配
  2. 在子文件夹 (usr\local\wbin) 中找到实际的可执行端口
  3. 要获取帮助信息,请键入命令后跟 --help(必须以小写形式拼写帮助)

例子:

((PROMPT)):unixdate +%Y%M%d
20141704

((PROMPT)):unixdate +%Y%b%d
2014Sep04
于 2014-09-04T08:32:52.903 回答
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将批处理文件作为脚本运行,并且:第一行之后的意思是批处理将忽略它并直接运行批处理代码。所以你去吧!

于 2021-05-28T14:00:35.857 回答