Board logo

标题: [日期时间] [已解決]求日期自动更新批处理脚本 [打印本页]

作者: conan52    时间: 2020-4-2 17:26     标题: [已解決]求日期自动更新批处理脚本

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

求两个bat脚本:

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

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

请教哪位大神能帮忙!
作者: netdzb    时间: 2020-4-2 18:39

回复 1# conan52

windows不是有date和time函数吗?重定向就可以了。
作者: wujunkai    时间: 2020-4-2 18:55

回复 1# conan52


    主要是日期比较让我头大。。。。。。
    有空想一下
作者: netdzb    时间: 2020-4-2 19:02

回复 3# wujunkai

想起来了用%time%和%date%
echo %time%
echo %date%
类似这样写的。
作者: netdzb    时间: 2020-4-2 19:08

回复 1# conan52

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

不知道这样可以吗?
作者: went    时间: 2020-4-2 19:49

本帖最后由 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路径
作者: wujunkai    时间: 2020-4-2 20:35

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

作者: conan52    时间: 2020-4-3 08:46

回复 6# went
十分感谢!!!
作者: conan52    时间: 2020-4-3 09:09

回复 7# wujunkai
同样感谢!
作者: conan52    时间: 2020-4-3 09:17

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

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

回复 10# conan52


6楼代码已修改,加了比较
修改日期必须管理员,
作者: conan52    时间: 2020-4-3 13:22

回复 11# went
好的,谢谢!
作者: conan52    时间: 2020-4-10 10:54

回复 6# went

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

发现了原因,是因为我的日期格式是mm-dd-yyyy
作者: conan52    时间: 2020-4-15 15:14

回复 6# went


    这个logDT.txt日志可以限制行数吗?自动删除几天前数据?
作者: went    时间: 2020-4-15 15:17

回复 15# conan52


    可以,晚点回去帮你弄
作者: conan52    时间: 2020-4-15 15:30

回复 16# went


   十分感谢!
作者: went    时间: 2020-4-15 21:59

回复 17# conan52 写入日志到文件
  1. @echo off
  2. REM logFile
  3. set "logFile=%~dp0logDT.txt"
  4. REM write
  5. echo.%date:~0,10%,%time:~0,8%>>"%logFile%"
  6. REM max line
  7. set "maxLine=20"
  8. REM current line num
  9. for /f "tokens=3 delims=:" %%i in ('find /n /c "," "%~dp0\logDT.txt"') do set "curLine=%%i"
  10. REM compare
  11. set /a "key=%curLine%-%maxLine%"
  12. if %key% gtr 0 (
  13. more +%key% "%logFile%" >"%~dp0tmp.txt"
  14. move /y "%~dp0tmp.txt" "%logFile%" >nul 2>nul
  15. )
复制代码

作者: conan52    时间: 2020-4-16 08:50

回复 18# went


    谢谢!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2