2009-11-17 68 views
8

我在Windows批处理文件中生成时间戳时遇到问题,因为我在不同的Windows版本上获得了不同的日期格式。如何获得UNIVERSAL Windows批处理文件时间戳

我的机器:

>echo %date% 
>Tue 11/17/2009 

友机:

>echo %date% 
>11/17/2009 

我想必须有使用FOR/F正从两个字符串日期(11/17/2009)的一些方法。我一直在努力和谷歌搜索,并找不到答案。

是否有另一种方法来获取不使用%date%的时间戳?

回答

2

使用VBScript如果你想获得独立的日期时间设置:

thedate = Now 
yr = Year(thedate) 
mth = Month(thedate) 
dy = Day(thedate) 
hr = Hour(thedate) 
min = Minute(thedate) 
sec = Second(thedate) 
WScript.Echo yr&mth&dy&hr&min&sec 
+0

这真的是有用的脚本内部通过: > cscript date.vbs // Nologo (其中date.vbs包含您包含的代码) – eliocs 2009-11-17 11:18:29

+0

这不仅仅是返回本地日期时间?问题是生成UTC日期时间 - 这正是我要找的。 – Jim2B 2016-07-26 15:27:55

1

不幸的是,它不能直接完成,所以你需要诉诸如GetDate.cmd黑客。

还有很多VBScript和小型外部命令行工具,除非您已经在整个系统中使用了某种特性,否则这不是我所依赖的。

就我个人而言,我会尝试通过使用PowerShell绕过它,它完全避免了问题。

+0

这是一个伟大的想法,但什么样的PowerShell代码会做到这一点? – Jim2B 2016-07-26 15:27:04

+0

@ Jim2B在PS中,你可以通过[DateTime] :: UtcNow获得一个对象,然后进行派对(例如它有一个Month属性等)。这是你的意思吗? – 2016-07-26 23:34:42

0

你不需要的VBScript。你可以像这样做:

echo %date:~-10,2%/%date:~-7,2%/%date:~-4,4% 

Source

+2

这不假设日期变量的输出格式? – 2012-01-18 01:17:19

+0

是的,这个假设当地日期格式是特定的格式。 – jamiebarrow 2012-03-20 08:30:33

4

退房doff.exe。我大量使用它来获取命名日志文件的时间戳。从其网站:

DOFF使用可选的日期偏移量(例如-1打印昨天的日期,+1打印明天的日期)打印格式化的日期和时间。要查看所有可用选项,请执行“doff -h”。我通常使用此实用程序重命名日志文件,以便它们包含时间戳(请参见下面的第三个示例)。这个代码应该在Unix/Linux和DOS下编译。

的样本命令:

C:\>doff 
19991108131135 

在没有参数的输出是在下面的格式的当前日期/时间:yyyymmddhhmiss

C:\>doff mm/dd/yyyy 
11/08/1999 

在上面的例子给出了日期格式规范。

@echo off 
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a 
set dd=%%b 
set yyyy=%%c) 
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log 

上面的批处理文件示例显示了一个巧妙的方法来重命名根据昨天的日期的日志文件。“for”命令执行doff来打印昨天的日期(“-1”参数指定为昨天),然后将日期的每个组件提取到DOS批处理文件变量中。 “重命名” 命令重命名 “的httpd-access.log的” 到 “的httpd-访问 - [昨天的日期] .LOG”


还检查了微软的now.exe,在Windows Server 2003 Resource Kit Tools可用。我发现一件坏事(困难的方法)是将ERRORLEVEL设置为打印的字符数。

是这样的:

c:\>now 

Thu May 19 14:26:45 2011 

帮助:

NOW : Display Message with Current Date and Time 

Usage : NOW [message to be printed with time-stamp] 

    NOW displays the current time, followed by its command-line arguments. 
    NOW is similar to the standard ECHO command, but with a time-stamp. 
0

正如我已经张贴在这里: Batch: Timestamp to UNIX Time

什么简单的1线长的C程序返回的UNIX时间戳?您可以在批处理脚本中从%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 
相关问题