DOS(或Windows命令提示符)中可以使用环境变量 %date% 和 %time% 来获取当前日期和时间,并通过字符串截取来提取其中的部分内容。
1. 基本变量
%date% 返回当前日期,格式依赖于系统区域设置(例如中文系统可能是 2024-01-30 或 2024/01/30 或 周二 2024/01/30)。
%time% 返回当前时间,格式如 10:05:30.45(注意小时数小于10时前面有空格,如 8:05:30.45)。
2. 字符串截取语法
%变量:~起始位置,长度%
- 起始位置:从 0 开始计数(0表示第一个字符)。
- 长度:要截取的字符个数(省略则截取到末尾)。
- 可以用负数表示从末尾开始计数。
3. 常见用法示例
3.1 提取年份(假设日期格式为 2024-01-30)
echo %date:~0,4%
结果:2024
3.2 提取月份
echo %date:~5,2%
(因为 2024-01-30 中月份从第5个字符开始,取2位)
3.3 提取日
echo %date:~8,2%
3.4 提取小时(注意小时可能前面有空格)
echo %time:~0,2%
如果时间小于10点(如 8:05:30),上面会得到带空格的 " 8",通常需要去除空格:
set hour=%time:~0,2%
set hour=%hour: =0%
echo %hour%
这样 " 8" 会变成 "08"。
3.5 提取分钟
echo %time:~3,2%
3.6 提取秒
echo %time:~6,2%
4. 实际应用:生成时间戳文件名
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%
set hour=%time:~0,2%
set hour=%hour: =0%
set minute=%time:~3,2%
set second=%time:~6,2%
set timestamp=%year%%month%%day%_%hour%%minute%%second%
echo %timestamp%
结果可能为:20240130_084530
5. 注意区域格式问题
如果日期格式是 周二 2024/01/30,那么年份的位置就不是 0,4 了。
可以先测试你的系统格式:
echo [%date%]
echo [%time%]
然后根据显示调整截取位置。
6. 在批处理文件中使用
在 .bat 文件中,如果要在代码块(如 if 或 for 中)使用,需要启用变量延迟扩展,并使用 !var! 代替 %var%:
@echo off
setlocal enabledelayedexpansion
set hour=%time:~0,2%
set hour=!hour: =0!
echo !hour!
7. 更通用的方法(使用wmic)
为了避免区域格式问题,可以用 wmic 命令获取标准格式的日期和时间:
for /f "tokens=1-3 delims=/ " %%a in ('wmic os get LocalDateTime /value ^| findstr "LocalDateTime"') do (
set datetime=%%a
)
set datepart=!datetime:~0,8!
set timepart=!datetime:~8,6!
echo 日期: !datepart!
echo 时间: !timepart!
如果需要我帮你写一个适应你系统格式的完整例子,可以告诉我你的 echo %date% 和 echo %time% 的输出结果。