前期提要
编写脚本时,需要获取系统当前时间,用作生成文件的文件名,由于不同的系统日期格式不同,导致文件生成失败。
![(windows环境文件名不允许包含特定字符,如图)](https://i-blog.csdnimg.cn/direct/6542409612c0487bac43d86a459fb77e.png)
故考虑编写函数,获取不同日期格式的日期数据,具体如下:
@echo off
setlocal enabledelayedexpansion
:: 获取当前日期和时间
for /f "tokens=1-4 delims=/-. " %%a in ("%date%") do (
set day=%%a
set month=%%b
set year=%%c
)
:: 检查年份长度,确定日期格式
if "%year%" LSS "1000" (
set temp=%year%
set year=%day%
set day=%temp%
)
:: 获取时间
for /f "tokens=1-3 delims=:., " %%a in ("%time%") do (
set hour=%%a
set minute=%%b
set second=%%c
)
:: 如果小时为一位数,在前面补零
if "%hour:~0,1%" LSS "10" set hour=0%hour%
:: 构建 yyyymmddhhmmss 格式的日期时间字符串
set datetime=%year%%month%%day%%hour%%minute%%second%
:: 输出结果
echo %datetime%
endlocal
pause
详细说明
-
获取当前日期:
- 使用
for /f
命令分割%date%
变量,分离出日期中的日、月、年。脚本根据区域设置确定是否需要交换day
和year
。
- 使用
-
获取当前时间:
- 使用
for /f
命令分割%time%
变量,提取小时、分钟和秒。
- 使用
-
处理单个字符的小时:
- 如果小时只有一位数(如
9
),则在前面补零,使其变为09
。
- 如果小时只有一位数(如
-
组装并输出日期时间:
- 最终将年、月、日、时、分、秒组装成
yyyymmddhhmmss
格式,并通过echo
命令输出。
- 最终将年、月、日、时、分、秒组装成
注意事项
- 如果你的区域设置不同(例如
MM/dd/yyyy
),脚本可能需要稍作调整,确保year
,month
,day
的顺序正确。 - 脚本中的
delims
参数根据日期和时间的分隔符调整。对于某些系统,你可能需要更改这些分隔符。