文章

如何使用Batch在Windows Server获取当前系统标准化日期时间(适配多语言/多地区)

如何使用Batch在Windows Server获取当前系统标准化日期时间(适配多语言/多地区)

在 Windows 批处理脚本中,获取当前系统日期和时间看似简单,实际上却暗藏“陷阱”。不同语言、地区的操作系统,%date%date 命令的输出格式都可能不同,导致直接字符串截取的方法不具备通用性。

常见的日期格式差异

  • 星期二 2008-07-29
  • 2008-07-29 星期二
  • 07/29/2008 Tue
  • Tue 07/29/2008

为什么不能直接用 %date%date 命令?

Windows 的日期格式由注册表 HKEY_CURRENT_USER\Control Panel\International 下的 sShortDate 决定。不同用户、不同地区、不同语言环境下,%date% 的内容都可能不同,直接用字符串截取很容易出错。

推荐做法:使用 WMIC 获取标准化日期时间

WMIC(Windows Management Instrumentation Command-line)可以直接获取标准化的本地日期时间,格式为 yyyymmddHHMMSS.ffffff±UUU,不受系统语言和地区影响。

批处理脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
:: 获取本地标准化日期时间
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"

:: 分别提取年月日时分秒
set "YY=%dt:~2,2%"
set "YYYY=%dt:~0,4%"
set "MM=%dt:~4,2%"
set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%"
set "Min=%dt:~10,2%"
set "Sec=%dt:~12,2%"

:: 拼接成自定义格式(如 20250621_101530)
set "curFullstamp=%YYYY%%MM%%DD%_%HH%%Min%%Sec%"

echo 当前标准化时间戳:%curFullstamp%

输出示例

1
当前标准化时间戳:20250621_101530

适用范围

  • 适用于所有 Windows 语言和地区设置
  • 不依赖注册表、系统变量的具体格式
  • 适合日志、备份、自动化脚本等场景

如需进一步定制或有其它脚本需求,欢迎留言交流!

本文由作者按照 CC BY 4.0 进行授权