bat文件中的日期格式

Date Formatting in a bat file

本问题已经有最佳答案,请猛点这里访问。

我的批处理脚本的一部分涉及在批处理文件中创建时间戳。
我使用以下代码以yyyy-mm-dd格式获取日期
set mydate=!date:~10,4!-!date:~4,2!-!date:~7,2!

当我的电脑上的设置是mm-dd-yy并返回date命令时
The current date is: Mon 09/26/2016和我的上述命令将其转换为2016-09-26

但问题是当我在另一台具有dd-mm-yy格式的机器上运行我的脚本时,date命令返回这个:

The current date is: 26-Sep-16和我上面的命令给了我:-ep-16

无论计算机上的日期格式设置如何,我怎么能始终以我想要的格式(yyy-mm-dd)获取日期?


命令wmic os get localdatetime将给出类似的输出

LocalDateTime
20160926085318.630000+120

您可以将输出放在var中或直接将其拆分为多个变量。

对于单行输出,将开关/value添加到上面的命令。 输出将如下所示:

LocalDateTime=20160926085649.867000+120

为了展示功能理念背后的概念,我编写了这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
setlocal EnableDelayedExpansion
REM change this to what you would do usually in your program:
for /l %%m in (1,1,5) do (
timeout /t 1
call:getNewTimestamp
echo !timestamp!
)
pause
goto:eof

:getNewTimestamp
for /f"delims== tokens=1*" %%g in ('wmic os get localdatetime /value') do (
if".%%g"==".LocalDateTime" (
REM Change this to the usual way to get your timestamp:
set timestamp=%%h
)
)
Goto:eof

因此,只要您需要当前时间戳,就需要call :getNewTimeStamp。 此功能将!timestamp!设置为所需的值。 然后,您可以像往常一样在程序的主要部分中使用该值。
所以我的例子有一个循环,它经历了5次,每次等待一秒,然后调用getNewTimestamp,然后回显!timestamp!的值。
这里的术语function可能会产生误导。 它从同一个脚本中更新脚本变量,最后的goto:eofcall - 命令一起组合,将导致更新符合"函数脚本"的变量。