[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 conan52 于 2020-4-17 11:02 编辑

求两个bat脚本:

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

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

请教哪位大神能帮忙!

回复 1# conan52

windows不是有date和time函数吗?重定向就可以了。

TOP

回复 1# conan52


    主要是日期比较让我头大。。。。。。
    有空想一下

TOP

回复 3# wujunkai

想起来了用%time%和%date%
echo %time%
echo %date%
类似这样写的。

TOP

回复 1# conan52

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

不知道这样可以吗?

TOP

本帖最后由 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

评分人数

TOP

回复 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
复制代码

TOP

回复 6# went
十分感谢!!!

TOP

回复 7# wujunkai
同样感谢!

TOP

回复 6# went
有两个小问题:

1、时间校准的时候,取的是log文件的最后一条。如果电脑因为一些原因保存的最后一条不是最新的时间。下次重启可能就可能同步到比较老的时间了。
2、时间校准的脚本运行需要run as administrator。因为电脑是域账号登录的,账号名也不是本地管理员。

TOP

回复 10# conan52


6楼代码已修改,加了比较
修改日期必须管理员,

TOP

回复 11# went
好的,谢谢!

TOP

回复 6# went

你好,这个时间更新有个问题。如果跨年度的话,时间就不能更新了。比如系统时间是2019年的话,log里是2020年,开机就不会更新到2020年。

TOP

发现了原因,是因为我的日期格式是mm-dd-yyyy

TOP

回复 6# went


    这个logDT.txt日志可以限制行数吗?自动删除几天前数据?

TOP

返回列表