如何在批处理文件中以独立于语言环境的格式获取日期?

use*_*123 5 windows format date batch-file cmd.exe

我正在尝试读取文件名中包含日期的文件。

问题是当系统中的日期格式为 US 时:mm/dd/yyyy它不起作用。

对于这种格式:dd/mm/yyyy它按预期工作。

dd/mm/yyyy即使系统设置为美国格式,我也需要以这种格式获取日期。

我是批处理新手,不知道如何以所需格式获取日期。

这是我的批处理文件:

for /f "delims=/ tokens=1-3" %%a in ("%date%") do (
rem Lets name our new variable "rdate" for reverse date
set _date=%%a-%%b-%%c
)

set source=%path%.csv
echo %source%
set dest=%path%_%_date%.csv
echo %dest%
Run Code Online (Sandbox Code Playgroud)

bar*_*lop 6

解析可能采用各种您不知道的格式的日期听起来是个坏主意。最好以特定格式获取日期,即使这意味着不是纯批处理而是调用 powershell。

C:\Users\tod>for /f %a in ('C:\Windows\System32\WindowsPowershell\v1.0\powershell -Command "Get-Date -format yyyy_MM_dd__HH_mm_ss"') do set datetime=%a

C:\Users\tod>set datetime=2018_01_22__09_15_33
Run Code Online (Sandbox Code Playgroud)

或没有时间。

C:\Users\tod>for /f %a in ('C:\Windows\System32\WindowsPowershell\v1.0\powershell -Command "Get-Date -format yyyy_MM_dd"') do set datetime=%a

C:\Users\tod>set datetime=2018_01_22

C:\Users\tod>
Run Code Online (Sandbox Code Playgroud)

顺便说一下,年/月/日,即 yyyy/mm/dd 格式非常好,因为它在英国和美国都很容易阅读。不用担心它是否像英国一样是 dd/mm/yy。或月/日/年。例如,您首先看到 2018 年,因此您首先知道这是年,然后您知道年之后是月份,然后是日期。

一旦您以您所知道的格式获得该日期(我建议 yyyy/mm/dd 格式),您就可以执行以下操作

C:\Users\tod>echo %datetime:~0,4%
2018

C:\Users\tod>
Run Code Online (Sandbox Code Playgroud)

依此类推..因此您可以将任何变量设置为等于年、月、月中的日期。

添加

如果您不想使用 powershell 并且不介意这仅适用于美国格式的日期。

C:\Users\tod>echo %date%
01/22/2018

C:\Users\tod>echo %date:~0,2%
01

C:\Users\tod>echo %date:~3,2%
22

C:\Users\tod>echo %date:~6,4%
2018

C:\Users\tod>
Run Code Online (Sandbox Code Playgroud)

所以你真的应该能够看到如何做到这一点

set first=%date:~0,2%

set second=%date:~3,2%

set third=%date:~6,4%


C:\Users\tod>set first=%date:~0,2%

C:\Users\tod>set second=%date:~3,2%

C:\Users\tod>set third=%date:~6,4%

C:\Users\tod>echo %first%/%second%/%third%
01/22/2018

C:\Users\tod>echo %second%/%first%/%third%
22/01/2018

C:\Users\tod>
Run Code Online (Sandbox Code Playgroud)

所以你可以说set ukdate=%second%/%first%/%third% 你可以说echo %ukdate%

只有当您知道系统上日期的格式并且知道它是美国时,这种非 powershell 方法才有效。我通常建议不要使用批处理,因为例如,如果操作系统出现新版本,并且命令的输出有点不同,并且您的代码在解析时假定采用特定格式,该怎么办?虽然在这种情况下,批量在某种意义上是整齐的,但有时它可能就像把木棍敲在一起。了解批处理并稍微使用它是一个好主意,但要安装一些其他脚本语言,如 Ruby、Python、Golang 或 NodeJS。但如果您想仅使用批处理来实现此目的,那么就可以了。