Reboot DIY
(2008-12-18 02:31:47)
标签:
diyrebootit |
前段时间遇到一个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
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
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
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
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 *
ECHO *
ECHO *
ECHO ********************************
ECHO *Usage: %0 n
t
ECHO *
ECHO *
ECHO *Example: %0 3 10
ECHO ********************************
:END
=====================================================cut
here===================================================================