bat 脚本之获取当前时间

通常情况下我们需要获取当前系统的时间等信息
这里提供一种常见的获取当前系统 年 月 日 时分秒信息的脚本

需要注意的是:不同语言(国家)的日期格式可能是不一样的。在验证之建议先通过

date
time

命令来实际的查看当前系统所使用到的真实日期格式是什么,以方便正确的获取到所需要的信息

日期格式

贴出代码

for /f "tokens=3" %%a in ('"reg query "HKEY_CURRENT_USER\Control Panel\International" /v  LocaleName"') do (set LocaleName=%%a)

if %LocaleName% EQU en-US (
    set Month=%date:~0,2%
    set Day=%date:~3,2%
    set Year=%date:~6,4%
)else (
    rem !en-US date format
    set Year=%date:~0,4%
    set Month=%date:~5,2%
    set Day=%date:~8,2%
)

set Hour=%time:~0,2%
set Minute=%time:~3,2%
set Second=%time:~6,2%
rem mCurrentLogFolder 2017_04_10_ 9_04_03
rem mCurrentLogFolder 2017_04_10_9_04_03
if %Hour% LSS 10 (
    echo init.bat:getYMH "Current Hour less than 10"
    set Hour=%time:~1,1%
)else (
    echo init.bat:getYMH "Current Hour more than 10"
    set Hour=%time:~0,2%
)

echo init.bat:getYMH C:\%Year%_%Month%_%Day%
if exist "C:\%Year%_%Month%_%Day%" (
    echo init.bat:getYMH Folder: C:\%Year%_%Month%_%Day% aleardy exist
    rem set LogFolder=%InitCurrentDir%\..\out\%Year%_%Month%_%Day%
    set LogFolder=C:\%Year%_%Month%_%Day%
)else (
    mkdir C:\%Year%_%Month%_%Day%
    if %errorlevel%==0 (
        echo init.bat:getYMH CrateFolder C:\%Year%_%Month%_%Day% Success..
        set LogFolder=C:\%Year%_%Month%_%Day%
    )else (
        echo init.bat:getYMH CrateFolder C:\%Year%_%Month%_%Day% Failed..
    )
)
<think>好的,我现在需要帮用户解决如何用BAT脚本获取当前时间点的问题。首先,用户提到了参考引用里的内容,特别是引用3和4,里面提到了用bat生成带日期的日志文件和使用wmic获取系统时间。我得先回顾这些引用内容,确保回答准确。 用户的问题明确,想要示例。根据引用3,使用`date`和`time`环境变量可能是直接的方法,比如`%date%`和`%time%`,但可能会有格式问题,比如包含空格或斜杠,这在文件名中可能不合适。所以需要处理这些字符,比如用替换的方法,将`/`和`:`替换掉。 另外,引用4提到用wmic来获取时间,这可能更精确,但语法比较复杂。比如用`wmic os get LocalDateTime`可以获取ISO格式的时间,然后通过字符串截取来提取年、月、日、时、分、秒。用户可能需要两种方法的示例,简单和更精确的。 接下来,我需要考虑代码的正确性。例如,直接使用`%date%`在不同系统区域设置下可能格式不同,比如中文系统可能是“2024-05-22”或者“2024/05/22 周三”,这会影响字符串处理。所以可能需要更通用的方法,或者提醒用户注意这点。 然后,处理时间中的空格和分隔符,比如将`%time:`=%`替换冒号为等号,或者用波浪线代替。同时,生成文件名时需要确保没有非法字符,比如用`set datetime=%date:/=-%_%time::=-%`这样的替换。 对于wmic方法,获取到的LocalDateTime是一个长字符串,比如“20240522153530.123456+480”,需要截取前14位来得到年月日时分秒,然后用子字符串分割。这里要注意bat脚本中字符串处理的语法,比如`%var:~0,4%`表示从0开始取4个字符。 最后,整理两种方法的示例代码,并指出各自的优缺点,比如第一种简单但依赖系统区域设置,第二种更精确但代码复杂。同时,根据引用3中的示例,给出生成日志文件名的例子,帮助用户实际应用。 还需要生成相关问题,可能涉及时间格式处理、bat脚本的其他时间操作、定时任务等,参考用户之前的问题结构,确保问题相关且有帮助。</think>### BAT脚本获取当前时间点的实现方法 在Windows批处理脚本获取当前系统时间主要有两种常用方法,下面分别说明实现步骤并附示例代码: #### 方法一:使用内置环境变量(快速简便) ```bat @echo off :: 获取标准日期时间(格式受系统区域设置影响) set current_date=%date% set current_time=%time% :: 处理时间中的空格(将冒号替换为等号) set datetime=%date:/=-%_%time::=-% set datetime=%datetime: =0% :: 输出结果 echo 当前日期:%current_date% echo 当前时间:%current_time% echo 格式化时间:%datetime% ``` **输出示例**: 当前日期:2024/05/22 周三 当前时间:13:45:28.56 格式化时间:2024-05-22_13-45-28 #### 方法二:使用WMIC命令(精确到毫秒) ```bat @echo off :: 通过WMIC获取ISO8601时间戳 for /f "tokens=2 delims==." %%a in ('wmic os get localdatetime /value^|find "="') do ( set datetime=%%a ) :: 分解时间戳 set year=%datetime:~0,4% set month=%datetime:~4,2% set day=%datetime:~6,2% set hour=%datetime:~8,2% set minute=%datetime:~10,2% set second=%datetime:~12,2% :: 输出结果 echo ISO8601时间:%datetime% echo 分解格式:%year%-%month%-%day% %hour%:%minute%:%second% ``` **输出示例**: ISO8601时间:20240522134530123456+480 分解格式:2024-05-22 13:45:30 --- ### 关键点说明 1. **变量替换技巧**:`%var:str1=str2%` 语法可替换变量中的字符串,如`%time::=-%`将冒号替换为短横线[^2] 2. **WMIC精度优势**:通过`wmic os get localdatetime`可获取包含毫秒的完整时间戳(格式:yyyymmddhhmmss.ffffff+时区)[^4] 3. **兼容性处理**:建议使用`set datetime=%datetime: =0%`处理上午10点前时间值中的空格(如" 9:15:00") --- ### 生成日志文件应用示例 ```bat @echo off set logfile=report_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%.log echo [%date% %time%] 系统启动日志 >> %logfile% ``` 将生成类似`report_20240522_1415.log`的文件名[^3] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值