无忧启动论坛

标题: 用GRUB4DOS 修改系统日期的批处理 [打印本页]

作者: chenall    时间: 2011-10-8 10:59
标题: 用GRUB4DOS 修改系统日期的批处理
最近好像有许多要求GRUB4DOS修改系统日期的功能,先用批处理写了一个。

有兴趣可以参考一下就可以改成修改系统时间的的功能,很简单的。

感谢135956提供的中断资料。

批处理源码如下。

复制源码请点击这里:

http://fayaa.com/code/view/23025/raw/


                !BAT
::datefunc for grub4dos by chenall 2011-10-08
setlocal
debug off
set edi=0x60000
set esi=0x60004
set ebp=0x60008
set esp=0x6000C
set ebx=0x60010
set bx=0x60010
set edx=0x60014
set dx=0x60014
set ecx=0x60018
set cx=0x60018
set eax=0x6001C
set ax=0x6001C
set gs=0x60020
set fs=0x60024
set es=0x60028
set ds=0x6002c
set ss=0x60030
set eip=0x60034
set cs=0x60038
set eflags=0x60003c
::时钟服务(Clock Service——INT 1AH)
::04H —读取日期
call :BIOS_INT 1A ax=0x400
set date=%*
if exist date && goto :SET_DATE
call Fn.0 0 "%%04X%%04X" *%cx% *%dx% | set date=
echo -n The current date is: %date:~0,4%-%date:~4,2%-%date:~6%
set /p date=Enter the new date: (yyyy-mm-dd)
  
:SET_DATE  调用BIOS中断修改日期
::05H —设置日期
call :BIOS_INT 1A ax=0x500 cx=0x%date:~0,4% dx=0x%date:~5,2%%%date:~8,2%
exit
  
:BIOS_INT
::初始化系统参数
echo -n > (md)0x300+1
write %cs% -1
write %ss% -1
write %esp% -1
write %eflags% -1
write %ds% -1
write %es% -1
write %fs% -1
write %gs% -1
write %eip% 0xFFFF%1CD
shift 1
  
::设置参数
:参数
if "%2"=="" goto :realmode_run
write %%%1% %2
shift 1
shift 1
goto :参数
:realmode_run
call Fn.53 0x60000
exit [/Font]


[ 本帖最后由 chenall 于 2011-10-8 11:02 编辑 ]
作者: Plantsoot    时间: 2011-10-8 11:41
改成外部命令好弄吗?

[ 本帖最后由 Plantsoot 于 2011-10-8 11:42 编辑 ]
作者: chenall    时间: 2011-10-8 12:11
外部命令。。

没有对输入的数据进行检测,自己使用时小心。

date
显示当前日期

date 2011-01-01

修改日期为2011-01-01

下载地址(传送门)

http://bbs.wuyou.net/forum.php?m ... p;page=2#pid2316675

[ 本帖最后由 chenall 于 2011-10-8 15:06 编辑 ]
作者: pseudo    时间: 2011-10-8 12:21
强。
批处理可以调用BIOS中断了。
作者: zxw    时间: 2011-10-8 12:27
好教材啊。不佩服不行。
作者: xiaoy    时间: 2011-10-8 13:01
希望通过PXE引导GRLDR把客户机的时间都改正确了,让时间和服务器同步
作者: 135956    时间: 2011-10-8 13:07
chenall大的效率真快,昨天提,今天就出。。。。了了一桩心愿!
会编程真是美好,我只是会用用电脑,永远的菜鸟。

[ 本帖最后由 135956 于 2011-10-8 13:14 编辑 ]
作者: zhaohj    时间: 2011-10-8 13:47
原帖由 chenall 于 2011-10-8 12:11 发表
外部命令。。

没有对输入的数据进行检测,自己使用时小心。

date
显示当前日期

date 2011-01-01
修改日期为2011-01-01


是否把月日顺序搞反了?

Snap1.jpg (12.05 KB, 下载次数: 199)

Snap1.jpg

作者: wwmy1982    时间: 2011-10-8 14:05
标题: 回复 #1 chenall 的帖子
哪儿有135956提供的中断资料?
作者: renchmin    时间: 2011-10-8 14:11
这个批处理做的很不错的啊。
作者: chenall    时间: 2011-10-8 14:12
标题: 回复 #8 zhaohj 的帖子
汗,显示的时候搞错了。
作者: chenall    时间: 2011-10-8 15:05
重新上传一下。

date-2011-10-08.zip

486 Bytes, 下载次数: 250, 下载积分: 无忧币 -2


作者: chenall    时间: 2011-10-8 15:07
标题: 回复 #9 wwmy1982 的帖子
时钟服务(Clock Service——INT 1AH)
00H —读取时钟“滴答”计数06H —设置闹钟
01H —设置时钟“滴答”计数07H —闹钟复位
02H —读取时间0AH —读取天数计数
03H —设置时间0BH —设置天数计数
04H —读取日期 80H —设置声音源信息
05H —设置日期
(1)、功能00H
功能描述:读取时钟“滴答”计数
入口参数:AH=00H
出口参数:AL=00H——未过午夜,否则,表示已过午夜
CX:DX=时钟“滴答”计数
(2)、功能01H
功能描述:设置时钟“滴答”计数
入口参数:AH=01H
CX:DX=时钟“滴答”计数
出口参数:无
(3)、功能02H
功能描述:读取时间
入口参数:AH=02H
出口参数:CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
DL=00H——标准时间,否则,夏令时
CF=0——时钟在走,否则,时钟停止
(4)、功能03H
功能描述:设置时间
入口参数:AH=03H
CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
DL=00H——标准时间,否则,夏令时
出口参数:无
(5)、功能04H
功能描述:读取日期
入口参数:AH=04H
出口参数:CH=BCD码格式的世纪
CL=BCD码格式的年
DH=BCD码格式的月
DL=BCD码格式的日
CF=0——时钟在走,否则,时钟停止
(6)、功能05H
功能描述:设置日期
入口参数:AH=05H
CH=BCD码格式的世纪
CL=BCD码格式的年
DH=BCD码格式的月
DL=BCD码格式的日
出口参数:无
(7)、功能06H
功能描述:设置闹钟
入口参数:AH=06H
CH=BCD码格式的小时
CL=BCD码格式的分钟
DH=BCD码格式的秒
出口参数:CF=0——操作成功,否则,闹钟已设置或时钟已停止
(8)、功能07H
功能描述:闹钟复位
入口参数:AH=07H
出口参数:无
(9)、功能0AH
功能描述:读取天数计数,仅在PS/2有效,在此从略
(10)、功能0BH
功能描述:设置天数计数,仅在PS/2有效,在此从略
(11)、功能80H
功能描述:设置声音源信息
入口参数:AH=80H
AL=声音源
=00H——8253可编程计时器,通道2
=01H——盒式磁带输入
=02H——I/O通道上的"Audio In"
=03H——声音产生芯片
出口参数:无
作者: 135956    时间: 2011-10-8 15:24
date-2011-10-08.zip 有源码么?学习学习。。。
作者: chenall    时间: 2011-10-8 15:41
标题: 回复 #14 135956 的帖子
http://code.google.com/p/grubutils/source/browse/trunk/src/date.c
作者: 135956    时间: 2011-10-8 15:51
先生顺便把修改时间的功能也加上吧。。。
作者: O.Y.M.2010    时间: 2011-10-8 15:54
原帖由 <i>chenall</i> 于 2011-10-8 15:05 发表 <a href="http://bbs.wuyou.net/redirect.php?goto=findpost&pid=2316675&ptid=200929" target="_blank"><img src="http://bbs.wuyou.net/images/common/back.gif" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onclick="if(!this.resized) {return true;} else {window.open(this.src);}" onmousewheel="return imgzoom(this);" alt="" /></a><br />
重新上传一下。
<br />

测试如下

sshot-1.png (11.12 KB, 下载次数: 204)

sshot-1.png

作者: 135956    时间: 2011-10-8 16:07
楼上的,格式:date 2011-01-01
你不要把那个0省略了呀。
作者: zhaohj    时间: 2011-10-8 16:11
楼上注意书写规范:yyyy-mm-dd
20100515要写成:2010-05-15
作者: chenall    时间: 2011-10-8 16:41
修改时间的批处理在这里,早上一起写的,不过修改时间的比较少用。

http://fayaa.com/code/view/23027/
作者: Plantsoot    时间: 2011-10-8 16:46
原帖由 chenall 于 2011-10-8 15:41 发表
http://code.google.com/p/grubutils/source/browse/trunk/src/date.c


回复 #13 chenall 的帖子

学习了,最近对外部命令很感兴趣,个人觉得批处理的反而没外部命令简单。
中断的资料也非常棒。

顺便问下,grubcall 的源码可以同步到grubutils吗。想学习下,嘎嘎……

[ 本帖最后由 Plantsoot 于 2011-10-8 16:50 编辑 ]
作者: chenall    时间: 2011-10-8 17:14
标题: 回复 #21 Plantsoot 的帖子
grubcall,还没有去实现,不过已经有人再做类似的工作了,我就暂时不弄了。
作者: 2011回忆爱情    时间: 2011-10-17 07:11
話說 看了 老半天

不知道 該如何 去 執行他

正確來說  菜單 該怎下呢  ><
作者: 527104427    时间: 2011-10-17 08:54
复制一楼的代码,保存为无后缀名的文件:DATA
并放在/BOOT/GRUB/目录下
进入GRUB命令行,想显示日期,就输入:DATA
想修改日期,就输入:date 2011-01-01
想修改成哪个日期,就把上面的“2011-01-01”替换成哪个日期
作者: 白手王    时间: 2011-12-28 01:59
非常好的文章,顶一下吧。
作者: 2012cnccnc    时间: 2012-6-26 16:12
标题: 回复 #1 chenall 的帖子
请问一下如何运行DATE这个文件呢?

本人是新手,请详细说明一下好吗
作者: chenall    时间: 2012-6-26 20:04
新手先看看教程...
不懂得运行我也没有办法又不能手把手的教。

这些都是很基本的东西。
作者: xinzaixin    时间: 2020-2-3 16:37
看不懂,望尘莫及。。。。。。。。。。。。




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3