@echo off
setlocal
echo.>list.txt
echo.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo.%%i>>list.txt
if not exist qchain.exe (start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329
echo 下载完成后解压出qchain.exe,和本程序放在同一目录下!)
for /f "delims= " %%i in ('dir /b *-chs.exe') do (for /f "delims= " %%j in (list.txt) do (findstr /i "%%j" %%i>nul && echo.||echo.%%i /z /q>>list.bat))
echo qchain >> list.bat
pause
我的目的是想首先检查系统已经打了哪些补丁,然后在生成批处理时不要将这些加进去。但是没有达到预期目的。
实现了批量安装以及避免重复安装的问题。目前已知问题:1搜索已安装补丁时的信息没能去掉;2对于使用msi安装的补丁,没有解决。完成代码如下:
1完全是自己写的。缺点就是如果有相同内容会显示很多空行,2是参考lxmxn写的。
@echo off
cd.>list.txt
cd.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo 系统已经安装的补丁有:%%i&echo.%%i>>list.txt
if not exist qchain.exe (echo 缺少文件,程序将自动下载。下载完成后解压出qchain.exe,和本程序放在同一目录下!
start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329)
for /f "tokens=1,2* delims=- " %%i in ('dir /b windows*-chs.exe') do (findstr /i "%%j" list.txt>nul &&echo.||echo %%i-%%j-%%k /z /q>>list.bat)
echo qchain >> list.bat
cls
echo 正在安装补丁,请稍候!!!!!
list
del /q list.bat
echo 恭喜,安装完成! 系统将自动退出!
ping -n 2 127.1 >nul&exit
@echo off
setlocal
cd.>list.txt
cd.>list.bat
for /f "tokens=2 delims=: " %%i in ('systeminfo ^|findstr /c:"KB"')do echo 系统已经安装的补丁有:%%i&echo.%%i>>list.txt
if not exist qchain.exe (echo 缺少文件,程序将自动下载。下载完成后解压出qchain.exe,和本程序放在同一目录下!
start http://php.tech.sina.com.cn/download/d_load.php?d_id=34472^&down_id=135329)
dir /b windows*-chs.exe | findstr /v /g:list.txt >new.bat
for /f %%i in (new.bat) do echo %%i /z /q >>list.bat
del /q new.bat
echo qchain >> list.bat
cls
echo 正在安装补丁,请稍候!!!!!
list
del /q list.bat
echo 恭喜,安装完成! 系统将自动退出!
ping -n 2 127.1 >nul&exit
Last edited by yardian on 2006-12-27 at 05:29 AM ]