windows最后的救赎——批处理

现在慢慢地开始体会到了命令行的强大,不管是在windows下,还是linux下。

因为工作关系,玩了下windows下的批处理文件(就是windows下的shell命令),实现了一些比较有意思的东西,现在整理出来。

一、在vbs中调用bat。

直接看vbs代码

Set ws=CreateObject("wscript.shell")

ws.run "cmd /c  run.bat",vbhide

将run.bat放在其同路径下,当运行vbs文件时,就会自动在后台运行bat文件

二、用bat注册COM控件

regsvr32  /s /u ActiveXCamera.ocx

regsvr32  /s ActiveXCamera.ocx

其中/s表示不管注册成功与否都不显示提示对话框,/u为卸载控件,不加/u则为注册

三、文件操作

如果想将一个文件复制到system32文件夹下,命令如下:

copy t.txt %systemRoot%\system32\t.txt

删除为

del  %SystemRoot%\system32\t.txt

四、自动一键安装运行库

如果我们将运行库放入自己的打包程序中,如果直接运行之,则会出现让用户点击“下一步”之类的按钮,很不友好。在网上找了大半天,终于发现了这篇博文《Windows运行库自动安装工具》,其中的bat文件内容如下:

View Code
  1 @echo off

  2 color 3F

  3 title Windows系统组件自动安装工具

  4 If "%PROCESSOR_ARCHITECTURE%"=="AMD64" (Set b=%SystemRoot%\SysWOW64) Else (Set b=%SystemRoot%\system32)

  5 Rd "%b%\test_permissions" >nul 2>nul

  6 Md "%b%\test_permissions" 2>nul||(Echo 请使用右键,以管理员身份运行&&Pause >nul&&Exit)

  7 Rd "%b%\test_permissions" >nul 2>nul

  8 cls

  9 echo ----------------------------------------------------------------------------

 10 echo.

 11 echo.

 12 echo.

 13 echo.

 14 echo.

 15 echo.

 16 echo                程序能自动判断操作系统版本及类型,无需人工操作

 17 echo.

 18 echo.

 19 echo.

 20 echo.

 21 echo.

 22 echo.

 23 echo                               按任意键开始安装

 24 echo.

 25 echo.

 26 echo.

 27 echo.

 28 echo.

 29 echo.

 30 echo     版本:2012/9/2;开发:Hugo;联系:[email protected]

 31 echo.

 32 echo ----------------------------------------------------------------------------

 33 pause >nul

 34 :Ver_1

 35 Ver|Find /I "5.1" > nul 2>nul 2>nul

 36 If "%ERRORLEVEL%"=="0" (Goto Type)

 37 Ver|Find /I "5.2" > nul 2>nul 2>nul

 38 If "%ERRORLEVEL%"=="0" (Goto Type)

 39 Ver|Find /I "6.0" > nul 2>nul 2>nul

 40 If "%ERRORLEVEL%"=="0" (Goto Type)

 41 Ver|Find /I "6.1" > nul 2>nul 2>nul

 42 If "%ERRORLEVEL%"=="0" (Goto Type)

 43 Cls 

 44 Echo 抱歉读取系统版本出错,请确定你的系统是否为Windows XP/2003/Vista/2008/7/2008 R2,按任意键退出。

 45 Pause>nul

 46 exit

 47 

 48 :Type

 49 if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" (goto Check_x86) else goto Check_x64

 50 

 51 :Check_x86

 52 if exist vc05redist_x86.EXE if exist vc08redist_x86.exe if exist vc10redist_x86.exe goto Setup_x86

 53 if not exist vc05redist_x86.EXE echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 54 if not exist vc08redist_x86.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 55 if not exist vc10redist_x86.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 56 

 57 :Check_x64

 58 if exist vc05redist_x86.EXE if exist vc05redist_x64.EXE if exist vc08redist_x86.exe if exist vc08redist_x64.exe if exist vc10redist_x86.exe if exist vc10redist_x64.exe goto Setup_x64

 59 if not exist vc05redist_x86.EXE echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 60 if not exist vc05redist_x64.EXE echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 61 if not exist vc08redist_x86.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 62 if not exist vc08redist_x64.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 63 if not exist vc10redist_x86.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 64 if not exist vc10redist_x64.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

 65 

 66 :Setup_x86

 67 echo 正在安装,请稍候……

 68 echo.

 69 start /wait vc05redist_x86.EXE /q

 70 start /wait vc08redist_x86.exe /q

 71 start /wait vc10redist_x86.exe /passive

 72 start /wait directx_Jun2010_redist.exe /q /t:%tmp%\dx & %tmp%\dx\dxsetup.exe /silent

 73 goto Ver_2

 74 

 75 :Setup_x64

 76 echo 正在安装,请稍候……

 77 echo.

 78 start /wait vc05redist_x86.EXE /q

 79 start /wait vc05redist_x64.EXE /q

 80 start /wait vc08redist_x86.exe /q

 81 start /wait vc08redist_x64.exe /q

 82 start /wait vc10redist_x86.exe /passive

 83 start /wait vc10redist_x64.exe /passive

 84 start /wait directx_Jun2010_redist.exe /q /t:%tmp%\dx & %tmp%\dx\dxsetup.exe /silent

 85 goto Ver_2

 86 

 87 :Ver_2

 88 Ver|Find /I "5.1" > nul 2>nul 2>nul

 89 If "%ERRORLEVEL%"=="0" (Goto Check_5X)

 90 Ver|Find /I "5.2" > nul 2>nul 2>nul

 91 If "%ERRORLEVEL%"=="0" (Goto Check_5X)

 92 Ver|Find /I "6.0" > nul 2>nul 2>nul

 93 If "%ERRORLEVEL%"=="0" (Goto Setup_6X)

 94 Ver|Find /I "6.1" > nul 2>nul 2>nul

 95 If "%ERRORLEVEL%"=="0" (Goto Setup_6X)

 96 Cls 

 97 Echo 抱歉读取系统版本出错,请确定你的系统是否为Windows XP/2003/Vista/2008/7/2008 R2,按任意键退出。

 98 Pause >nul

 99 exit

100 

101 :Check_5X

102 if exist dotnetfx35.exe goto Setup_5X

103 if not exist dotnetfx35.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

104 

105 :Setup_5X

106 start /wait dotnetfx35.exe /lang:ENU /qb

107 

108 if "%PROCESSOR_ARCHITECTURE%%PROCESSOR_ARCHITEW6432%" == "x86" (goto Check_lang_x86) else goto Check_lang_x64

109 

110 :Check_lang_x86

111 if exist dotnetfx35langpack_x86zh-CHS.exe goto lang_x86

112 if not exist dotnetfx35langpack_x86zh-CHS.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

113 

114 :Check_lang_x64

115 if exist dotnetfx35langpack_x64zh-CHS.exe goto lang_x64

116 if not exist dotnetfx35langpack_x64zh-CHS.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

117 

118 :lang_x86

119 start /wait dotnetfx35langpack_x86zh-CHS.exe /qb

120 goto Check_6X

121 :lang_x64

122 start /wait dotnetfx35langpack_x64zh-CHS.exe /qb

123 

124 :Check_6X

125 if exist dotNetFx40_Full_x86_x64.exe goto Setup_6X

126 if not exist dotNetFx40_Full_x86_x64.exe echo.&echo.&echo.&echo.&echo.&echo.&echo                   程序文件不完整,请重新下载安装程序进行安装。&echo.&echo.&echo.&echo.&echo                                 按任意键退出&pause>nul& exit

127 

128 :Setup_6X

129 start /wait dotNetFx40_Full_x86_x64.exe /norestart /passive

130 rd /s /q %tmp%\dx\

131 cls

132 echo.&echo.&echo.&echo.&echo                   安装过程结束,建议重启计算机以便更改生效。

133 echo.&echo.&echo.&echo.&echo                                  按任意键退出!

134 pause >nul

135 exit

其中自动安装VC2008运行库的核心命令行为:start /wait vc08redist_x86.exe /q  ,而关键之处就在于后面的 /q 选项。

五、杀毒软件悄悄安装补丁的方法

在找自动安装运行库时,顺便找到了自动一键安装windows补丁的方法。杀毒软件或者是电脑管家一般都会从官网下载系统补丁,然后就自动安装了,根本不要我们去点击什么“下一步”的操作,而如果我们自动用鼠标去点击那些下载好的"WindowsXP-KB2618444-x86-CHS.exe"之类的文件,一般都会有一个“无聊的交互界面”。

在360的论坛上找到了这篇文章《系统补丁批量自动安装》,其给出的bat代码如下

补丁自动安装
 1 @echo off

 2 echo------------------------------------------------------

 3 title 系统补丁批量自动安装

 4 color 1f

 5 cls

 6 MODE con: COLS=60 LINES=25

 7 set tm1=%time:~0,2%

 8 set tm2=%time:~3,2%

 9 set tm3=%time:~6,2%

10 ECHO %date% %tm1%点%tm2%分%tm3%秒 

11 echo 补丁安装中......

12 echo.

13 for %%i in (*.exe) do %%i /passive /norestart /nobackup

14 ECHO %date% %tm1%点%tm2%分%tm3%秒

15 echo 补丁已经全部安装完毕!

16 echo 请按任意键重启电脑!

17 echo ......

18 PAUSE >nul

19 shutdown -r

20 echo---------------------------------------------------------------

其中的核心代码为

 for %%i in (*.exe) do %%i /passive /norestart /nobackup

这行代码会扫描文件夹中所有的exe文件,并执行之,如果只想安装某个特定的补丁,则可以

one.exe /passive /norestart /nobackup 

这里的关键也是后面的那一串命令行选项。

 

 

PS:现在自己收集的知识就这么多,以后将继续扩充。命令的使用真的有界面无法代替的地方,在windows下小小学了下命令的使用就可以完成一些复杂的操作,可windows的命令又是如此含蓄,如此羞涩~~

下面,收集一些windows批处理或者命令行时的注意点:

  1. 批处理文件时,文件名中最好不好有空格。如果没办法去掉,则应该用短文件名
  2. 批处理的注释为头尾分别两个 %% ,(相当于C++中的/* */),或者用rem注释行(相当于C中的//)

你可能感兴趣的:(windows)