现在慢慢地开始体会到了命令行的强大,不管是在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文件内容如下:
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批处理或者命令行时的注意点:
- 批处理文件时,文件名中最好不好有空格。如果没办法去掉,则应该用短文件名
- 批处理的注释为头尾分别两个 %% ,(相当于C++中的/* */),或者用rem注释行(相当于C中的//)