找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 77592|回复: 18

[日期时间] [已解決]求日期自动更新批处理脚本

[复制链接]
发表于 2020-4-2 17:26:31 | 显示全部楼层 |阅读模式
本帖最后由 conan52 于 2020-4-17 11:02 编辑

求两个bat脚本:

1. 系统定期将当前系统日期写入一个本地的日志文件。

2.每次开机如果系统日期比日志里的最新日期晚,就自动修改系统日期到日志里记录的最后日期。

请教哪位大神能帮忙!
发表于 2020-4-2 18:39:47 | 显示全部楼层
回复 1# conan52

windows不是有date和time函数吗?重定向就可以了。
发表于 2020-4-2 18:55:49 | 显示全部楼层
回复 1# conan52


    主要是日期比较让我头大。。。。。。
    有空想一下
发表于 2020-4-2 19:02:26 | 显示全部楼层
回复 3# wujunkai

想起来了用%time%和%date%
echo %time%
echo %date%
类似这样写的。
发表于 2020-4-2 19:08:20 | 显示全部楼层
回复 1# conan52

echo %time%>>日志文件.log

不知道这样可以吗?
发表于 2020-4-2 19:49:44 | 显示全部楼层
本帖最后由 went 于 2020-4-3 11:29 编辑

写入日期到日志文件:
  1. echo.%date:~0,10%,%time:~0,8%>>"%~dp0\logDT.txt"
复制代码
更新日期:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
  4. set "logDT=%date:~0,10%,%time:~0,8%"
  5. for /f "usebackq delims=" %%i in ("%~dp0\logDT.txt") do if "!logDT!" lss "%%i" set "logDT=%%i"
  6. if "%date:~0,10%,%time:~0,8%" lss "%logDT%" (
  7.         echo update date time : %logDT%
  8.         date %logDT:~0,10%
  9.         time %logDT:~11,8%
  10. )
  11. pause&exit
复制代码
开机自动修改要把bat放到C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp路径

评分

参与人数 1技术 +1 收起 理由
conan52 + 1 感谢!

查看全部评分

发表于 2020-4-2 20:35:37 | 显示全部楼层
回复 1# conan52


    为什么是两个脚本啊。。。。。。。。。写在一起了。
    里面的time_cmp和date_cmp请自行解决。。。工作量太大了
    发现时间有问题直接把older赋为false即可。。。。。。。。
  1. @echo off

  2. set "older=true"

  3. :main
  4.     call:init
  5.     call:scanf
  6.     call:date_cmp
  7.     call:time_cmp
  8.     if "%older%"=="false" call:correct
  9.     echo 时间校准完毕
  10.     pause
  11. goto:eof

  12. :init
  13.     rem 初始化程序
  14.     if not exist D:\last_time.txt (
  15.         call:write
  16.         echo 初次运行,请加入开机自启动
  17.         set /P=请按任意键退出. . .
  18.         exit
  19.     )
  20. goto:eof

  21. :scanf
  22.     rem 读取上次开机的时间
  23.     for /F "tokens=1,2" %%i in (D:\last_time.txt) do (
  24.         set "get_date=%%i"
  25.         set "get_time=%%j"
  26.     )
  27. goto:eof

  28. :write
  29.     rem 保存开机时的时间
  30.     echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time%>D:\last_time.txt
  31. goto:eof

  32. :date_cmp
  33.     rem 日期比较
  34.     if "%older%"=="false" goto:eof
  35. goto:eof

  36. :time_cmp
  37.     rem 时间比较
  38.     if "%older%"=="false" goto:eof
  39. goto:eof

  40. :correct
  41.     rem 校准时间
  42.     echo %get_date%>D:\date.tmp
  43.     echo %get_time%>D:\time.tmp
  44.     date<D:\date.tmp
  45.     time<D:\time.tmp
  46.     del D:\date.tmp
  47.     del D:\time.tmp
  48. goto:eof
复制代码
 楼主| 发表于 2020-4-3 08:46:43 | 显示全部楼层
回复 6# went
十分感谢!!!
 楼主| 发表于 2020-4-3 09:09:49 | 显示全部楼层
回复 7# wujunkai
同样感谢!
 楼主| 发表于 2020-4-3 09:17:23 | 显示全部楼层
回复 6# went
有两个小问题:

1、时间校准的时候,取的是log文件的最后一条。如果电脑因为一些原因保存的最后一条不是最新的时间。下次重启可能就可能同步到比较老的时间了。
2、时间校准的脚本运行需要run as administrator。因为电脑是域账号登录的,账号名也不是本地管理员。
发表于 2020-4-3 11:30:37 | 显示全部楼层
回复 10# conan52


6楼代码已修改,加了比较
修改日期必须管理员,
 楼主| 发表于 2020-4-3 13:22:46 | 显示全部楼层
回复 11# went
好的,谢谢!
 楼主| 发表于 2020-4-10 10:54:31 | 显示全部楼层
回复 6# went

你好,这个时间更新有个问题。如果跨年度的话,时间就不能更新了。比如系统时间是2019年的话,log里是2020年,开机就不会更新到2020年。
 楼主| 发表于 2020-4-10 12:49:11 | 显示全部楼层
发现了原因,是因为我的日期格式是mm-dd-yyyy
 楼主| 发表于 2020-4-15 15:14:35 | 显示全部楼层
回复 6# went


    这个logDT.txt日志可以限制行数吗?自动删除几天前数据?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:50 , Processed in 0.023310 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表