Board logo

标题: [系统增强] 修改注册表开机启动项的批处理小工具 [打印本页]

作者: zhouyongjun    时间: 2009-7-5 15:52     标题: 修改注册表开机启动项的批处理小工具

过年时在家无聊,写了这个东西,现在发上来赚点积分。O(∩_∩)O~
WINDOWS自启动项太多了,见此贴http://bbs.bathome.net/viewthread.php?tid=215&highlight=%D7%D4%C6%F4%B6%AF
我这里只统计了启动文件夹、HKCU和HKLM下的RUN项,这也是我们熟悉的启动项。自己感觉用起来还是很方便的,就发上来跟大家分享一下。
  1. @echo off&setlocal enabledelayedexpansion
  2. title 系统工具-CMD@WinXP
  3. :: by zhouyongjun @bbs.bathome.net 2009-07-05
  4. :main
  5. cls&color 3f&call :logo
  6. reg query HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools 2>nul|findstr/i "0x1" >nul 2>nul&&set/a v_registry=0||set/a v_registry=1
  7. set/a m=0
  8. reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL /v CheckedValue 2>nul |findstr/i "0x1" >nul 2>nul&&set/a v_showall=0||set/a v_showall=1
  9. if %v_registry% equ 1 (
  10. call :menu 打开注册表编辑器&call :menu 禁用注册表) else (
  11. call :menu 启用注册表)
  12. if %v_showall% equ 0 (
  13. call :menu 禁止显示隐藏文件) else (
  14. call :menu 允许显示隐藏文件)
  15. call :menu 开机启动项&call :menu 退出
  16. echo.
  17. set "input="&set/p input=                            请选择:
  18. if not defined input goto main
  19. set "input=%input: =%"&set "input=!input:~0,1!"
  20. if %v_registry% equ 1 set/a input-=1
  21. if "%input%" equ "0" start regedit&goto main
  22. if "%input%" equ "1" (
  23. reg add  HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\System /v DisableRegistryTools /t reg_dword /d %v_registry% /f >nul&goto main)
  24. if "%input%" equ "2" (reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL /v CheckedValue /t reg_dword /d %v_showall% /f >nul&goto main)
  25. if "%input%" equ "3" call :_window&goto run
  26. if "%input%" equ "4" exit
  27. call :error&goto main
  28. :menu
  29. set/a m+=1
  30. echo           %m%. %1
  31. goto :eof
  32. :run //**获取启动文件夹、HKCU和HKLM下面的RUN项中的自启动信息**//
  33. cls&color 3f&call :logo
  34. echo                               开机自启动项列表
  35. echo.&setlocal
  36. for /r "%userprofile%\「开始」菜单\程序\启动\" %%i in (*.*) do (
  37.     set/a n+=1&set _!n!way="%%i"&call :list !n! "%%~ni"
  38. )
  39. set "regcu=HKCU\Software\Microsoft\Windows\CurrentVersion\Run"
  40. set "reglm=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
  41. for %%i in (%regcu% %reglm%) do (
  42.     set tem_flag=a
  43.     for /f "skip=4 tokens=1,2*" %%a in ('reg query %%i /s') do (
  44.         set "va=%%a"&set "vb=%%b"&set "vc=%%~c"
  45.         if "!vb!" equ "" set "tem_flag="
  46.         if defined tem_flag (set/a n+=1&set "_!n!name=!va!"&set _!n!way="%%i"
  47.             if /i "!vb!" neq "reg_sz" (set vd=!vb:*:=!&call,set vb=%%vb:!vd!=%%
  48.                 set vb=!vb:~-2,2!&set vc=!vb!!vd!
  49.             )
  50.             call :list !n! "!va!" "!vc!"
  51.         )
  52.     )
  53. )
  54. echo.
  55. echo         d.删除自启动项(删除单个:d+序号,如d1,d2;删除多个:逗号隔开,如d1,2,5)
  56. echo         a.添加自启动项
  57. echo         m.返回主菜单
  58. echo         q.退出
  59. set "take="&set /p take=                请输入:
  60. if not defined take endlocal&goto run
  61. set "take=%take: =%"&set "take1=!take:~,1!"&set "take2=!take:~1!"
  62. if /i "%take1%"=="d" goto drun
  63. if /i "%take1%"=="a" goto add
  64. if /i "%take1%"=="m" endlocal&call :_window&goto main
  65. if /i "%take1%"=="q" exit
  66. call :error&endlocal&goto run
  67. :drun //**输入验证,删除选定项**//
  68. set "_take2=!take2:,=!"
  69. echo %_take2%|findstr "^[1-9][0-9]*$" >nul 2>nul||(call :error&endlocal&goto run)
  70. for %%i in (%take2%) do (
  71.    if not defined _%%iway (echo.&set/p=         序号%%i不存在<nul&ping /n 2 127.1 >nul
  72.       ) else (if not defined _%%iname (del/a/f/q !_%%iway! >nul) else (
  73.           reg delete !_%%iway! /v "!_%%iname!" /f >nul
  74.       )
  75.    )
  76. )
  77. endlocal&goto run
  78. :add
  79. cls&color 3f&call :logo
  80. echo                请把需要添加为开机自启动的文件拖入窗口按回车结束!
  81. echo.&echo.
  82. set/p vadd=           
  83. if not defined vadd goto add
  84. if not exist %vadd% (
  85.     color 4e&echo.&echo.&echo                                 文件不存在!!!
  86.     ping /n 3 127.1 >nul&goto add
  87. )
  88. for %%i in (%vadd%) do (reg add %reglm% /v "%%~ni" /t reg_sz /d %%i /f >nul)
  89. endlocal&goto run
  90. :list
  91. echo      %1. %~2     %3
  92. goto :eof
  93. :error
  94. color 4e&echo.
  95. echo                               输入有误,请重新输入!
  96. ping /n 3 127.1>nul
  97. cls
  98. goto :eof
  99. :_window //**窗口动画**//
  100. setlocal&call :_move-wind 82 15 25 10 15 82 10 25 82&endlocal&goto :eof
  101. :_move-wind
  102. set/a w_n+=1,m_n=w_n%%2&set "sign=-"
  103. (if %w_n% gtr 2 set "sign=")&(if %w_n% equ 5 goto :eof)
  104. if %m_n% equ 0 (set con_a=lines&set con_b=cols) else (set con_a=cols&set con_b=lines)
  105. for /l %%a in (%1,%sign%1,%2) do mode con %con_a%=%%a %con_b%=%3
  106. shift&shift&goto _move-wind
  107. :logo
  108. echo.&echo.
  109. echo          〓§〓〓〓〓〓§〓〓〓 %date% 〓〓〓§〓〓〓〓〓§〓
  110. echo.&echo.&goto :eof
复制代码

作者: hackerlong    时间: 2009-7-6 00:53

水平不错哦!我先看看。貌似可以不用这么复杂的。
作者: zhouyongjun    时间: 2009-7-6 14:54     标题: 回复 2楼 的帖子

代码我在最初的基础上优化了下才发上来的,也没仔细去看了
SP2下reg query显示中文有点问题,多了些代码处理;另外reg query会把RUN的子键里面的值也列出来,比如360,会有个子键里面有很多东西,我没让他列出来。如果要实现原有的功能要优化也优化不了多少了吧。这些只是些体力活而已,我也就只有这个水平了,还望大家多多指点。
作者: ynkm0871    时间: 2009-7-10 12:04

下来用一用的啦,很不错的嘛!
作者: best841228    时间: 2009-7-17 22:39

下来用用看,非常感谢提供!
作者: gotmony    时间: 2009-8-3 00:06     标题: 回复 1楼 的帖子

代码看的我头大,但很不错
作者: lxzzr    时间: 2010-9-21 23:44

还是不习惯“cls&color 3f&call :logo”这样的写法,呵呵
作者: huluo666    时间: 2012-10-4 14:36

谢谢,太实用啦!!!
作者: 学无止境    时间: 2012-10-7 02:45

看我的头像@@




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