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;联系:loveqhugo.blog@gmail.com
 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中的//)
原文地址:https://www.cnblogs.com/xiangism/p/2789606.html