标题: [日期时间] [已解決]求日期自动更新批处理脚本 [打印本页]
作者: 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 编辑
写入日期到日志文件:- echo.%date:~0,10%,%time:~0,8%>>"%~dp0\logDT.txt"
复制代码
更新日期:- @echo off
- setlocal enabledelayedexpansion
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- set "logDT=%date:~0,10%,%time:~0,8%"
- for /f "usebackq delims=" %%i in ("%~dp0\logDT.txt") do if "!logDT!" lss "%%i" set "logDT=%%i"
- if "%date:~0,10%,%time:~0,8%" lss "%logDT%" (
- echo update date time : %logDT%
- date %logDT:~0,10%
- time %logDT:~11,8%
- )
- 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即可。。。。。。。。- @echo off
-
- set "older=true"
-
- :main
- call:init
- call:scanf
- call:date_cmp
- call:time_cmp
- if "%older%"=="false" call:correct
- echo 时间校准完毕
- pause
- goto:eof
-
- :init
- rem 初始化程序
- if not exist D:\last_time.txt (
- call:write
- echo 初次运行,请加入开机自启动
- set /P=请按任意键退出. . .
- exit
- )
- goto:eof
-
- :scanf
- rem 读取上次开机的时间
- for /F "tokens=1,2" %%i in (D:\last_time.txt) do (
- set "get_date=%%i"
- set "get_time=%%j"
- )
- goto:eof
-
- :write
- rem 保存开机时的时间
- echo %date:~0,4%-%date:~5,2%-%date:~8,2% %time%>D:\last_time.txt
- goto:eof
-
- :date_cmp
- rem 日期比较
- if "%older%"=="false" goto:eof
- goto:eof
-
- :time_cmp
- rem 时间比较
- if "%older%"=="false" goto:eof
- goto:eof
-
- :correct
- rem 校准时间
- echo %get_date%>D:\date.tmp
- echo %get_time%>D:\time.tmp
- date<D:\date.tmp
- time<D:\time.tmp
- del D:\date.tmp
- del D:\time.tmp
- 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 写入日志到文件- @echo off
- REM logFile
- set "logFile=%~dp0logDT.txt"
- REM write
- echo.%date:~0,10%,%time:~0,8%>>"%logFile%"
- REM max line
- set "maxLine=20"
- REM current line num
- for /f "tokens=3 delims=:" %%i in ('find /n /c "," "%~dp0\logDT.txt"') do set "curLine=%%i"
- REM compare
- set /a "key=%curLine%-%maxLine%"
- if %key% gtr 0 (
- more +%key% "%logFile%" >"%~dp0tmp.txt"
- move /y "%~dp0tmp.txt" "%logFile%" >nul 2>nul
- )
复制代码
作者: conan52 时间: 2020-4-16 08:50
回复 18# went
谢谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |