加载中…
个人资料
趋势研发中心
趋势研发中心
  • 博客等级:
  • 博客积分:0
  • 博客访问:5,779
  • 关注人气:34
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Reboot DIY

(2008-11-10 19:21:08)
标签:

reboot

times

杂谈

分类: 技术分享

                                      Reboot DIY

 

    前段时间遇到一个bug,需要重启计算机特定次数后,这个bug才会出现。本想google上搜一个tool搞定。但不是让你注册先,就是有次数限制。而且往往夹杂了许多不需要的功能。看看XP自带的命令shutdown,又没有次数的参数。于是决定用批处理文件DIY一个。顺便也可以温习一下批处理命令。

  简单思路:
1.清楚administrator 用户的密码,确保计算机能自动登陆。
2.将这个批处理文件加入到注册表run子键中。确保每次开机运行。
3.记录需要重启次数times和已经重启次数count到文件或者注册表。
4.用shutdown命令重启计算机。
5.每次重启后,已经重启次数count加1。
6.当已经重启次数等于需要重启次数时,停止重启。

 

    经过一段时间的尝试。代码可以工作了,但发现两次重启时间太短。被测试的应用程序还没来得及完全起来。计算机就又重启了。这可不太妙。于是修改过程如下:

 

1.清楚administrator 用户的密码,确保计算机能自动登陆。
2.将这个批处理文件加入到注册表run子键中。确保每次开机运行。
3.记录需要重启次数times和已经重启次数count到文件或者注册表。
4.输入一个两次重启的间隔时间的参数interval,并传给shutdown。
5.再用shutdown命令重启计算机
6.每次重启后,已经重启次数count加1。
7.当已经重启次数count等于需要重启次数times时,停止重启。

 

    再次运行代码。这回可以较好的工作了。但当我在Vista上运行代码时,问题又来了。我们用reg query来读取注册表信息。但在vista和XP上两者的输出不太一样。我们必须加以处理。为了支持vista,所以不得不区分操作系统了。于是想到用Ver命令来查看操作系统的信息。修改过程如下:

 

1.清楚administrator 用户的密码,确保计算机能自动登陆。
2.将这个批处理文件加入到注册表run子键中。确保每次开机运行。
3.记录需要重启次数times和已经重启次数count到文件或者注册表。
4.输入一个两次重启的间隔时间的参数interval,并传给shutdown。
5.通过ver判断操作系统。Vista和XP分别处理。
6.再用shutdown命令重启计算机
7.每次重启后,已经重启次数count加1。
8.当已经重启次数count等于需要重启次数times时,停止重启。

 

    再次调试,这段代码基本可以工作在XP和vista上了。最后请参考下面代码。如果有任何问题。请各位大侠斧正。谢谢。


===========================================cut here===============================
@ECHO OFF

IF "%1"=="" GOTO USAGE
IF "%2"=="" GOTO USAGE
SET count=0
Net user administrator ""
REM "这里需将administrator的密码清空。主要为了使计算机重启后不用输入密码就能登陆。"

REG add HKLM\software\Microsoft\Windows\CurrentVersion\Run /v reboot /t REG_SZ /d "c:\reboot.bat" /f
REM "添加注册表键值reboot到run下,确保每次重启后能执行reboot.bat"

REG add HKLM\Software\reboot /v times /t REG_SZ /d "%1" /f
REM "time用来保存总共需要reboot的次数。"

REG add HKLM\Software\reboot /v count /t REG_SZ /d "0" /f
REM "count用来保存已经reboot的次数。"

REG add HKLM\Software\reboot /v interval /t REG_SZ /d %2 /f
REM "interval用来保存两次重启间隔时间"

For /F "skip=1 tokens=3" %%i IN ('ver') Do SET version=%i
IF "%version%"=="XP" GOTO XP
GOTO Vista
REM "通过ver判断操作系统。”


:XP
ECHO @ECHO OFF  > c:\reboot.bat
ECHO :START >> c:\reboot.bat
ECHO For /F "skip=3 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v count') Do SET count=%%%%i%% >> c:\reboot.bat
ECHO For /F "skip=3 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v times') Do SET times=%%%%i%% >> c:\reboot.bat
ECHO For /F "skip=3 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v interval') Do SET interval=%%%%i%% >> c:\reboot.bat
ECHO IF "%%count%%"=="%%times%%" GOTO END >> c:\reboot.bat
ECHO SET /a count=%%count%%+1 >> c:\reboot.bat
ECHO REG add HKLM\software\reboot /v count /t REG_SZ /d %%count%% /f >> c:\reboot.bat
ECHO ECHO %%count%% >> c:\reboot.bat
ECHO shutdown -r -t %%interval%% -f -c "Count:%%count%% times. Totally:%%times%% times.">> c:\reboot.bat
ECHO EXIT >> C:\reboot.bat
ECHO :END >> c:\reboot.bat
ECHO SET count=0  >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v count /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v times /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v interval /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\Microsoft\Windows\CurrentVersion\Run /v reboot /f >> c:\reboot.bat
ECHO ECHO END >> c:\reboot.bat
ECHO DEL c:\reboot.bat >> c:\reboot.bat

REM "如果为XP,以上脚本会在c:\下产生一个reboot.bat文件用来控制reboot。"


:Vista
ECHO @ECHO OFF  > c:\reboot.bat
ECHO :START >> c:\reboot.bat
ECHO For /F "skip=2 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v count') Do SET count=%%%%i%% >> c:\reboot.bat
ECHO For /F "skip=2 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v times') Do SET times=%%%%i%% >> c:\reboot.bat
ECHO For /F "skip=2 tokens=3" %%%%i IN ('reg query "HKLM\Software\reboot" /v interval') Do SET interval=%%%%i%% >> c:\reboot.bat
ECHO IF "%%count%%"=="%%times%%" GOTO END >> c:\reboot.bat
ECHO SET /a count=%%count%%+1 >> c:\reboot.bat
ECHO REG add HKLM\software\reboot /v count /t REG_SZ /d %%count%% /f >> c:\reboot.bat
ECHO ECHO %%count%% >> c:\reboot.bat
ECHO shutdown -r -t %%interval%% -f -c "Count:%%count%% times. Totally:%%times%% times.">> c:\reboot.bat
ECHO EXIT >> C:\reboot.bat
ECHO :END >> c:\reboot.bat
ECHO SET count=0  >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v count /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v times /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\reboot /v interval /f >> c:\reboot.bat
ECHO REG DELETE HKLM\software\Microsoft\Windows\CurrentVersion\Run /v reboot /f >> c:\reboot.bat
ECHO ECHO END >> c:\reboot.bat
ECHO DEL c:\reboot.bat >> c:\reboot.bat

REM "如果为Vista, 以上脚本会在c:\下产生一个reboot.bat文件用来控制reboot。"

C:\reboot.bat
GOTO END

:USAGE
ECHO ********************************
ECHO *    Auto reboot tool v0.1     *
ECHO *    Author:TrendMicro         *
ECHO *   Company Trendmicro        *
ECHO ********************************
ECHO *Usage: %0 n t     *
ECHO *    n: Reboot times.          *
ECHO *    t: Interval between reboot*
ECHO *Example: %0 3 10  *
ECHO ********************************

:END
=============================cut here=============================

 

                                                                                                                                                             - Ge
声明:本文属趋势科技中国研发中心同事原创,转载请附上本文原始出处链接和作者信息(趋势科技中国研发中心)。谢谢!

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有