![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-03 08:38 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 帮忙简化安装系统补丁P处理 |
| 可打印版本 1,174 / 8 |
| 第1楼 bbq123bbq | 发表于 2007-02-04 12:07 |
| 初级用户 发帖 77 积分 197 | |
|
帮忙简化安装系统补丁P处理 for /f "delims=." %%i in (2.txt) do echo %%i >>3.txt && findstr /v/g:1.txt 3.txt >>4.txt
for /f %%j in (4.txt) do echo %%j.exe >>5.bat 2.TXT为所有系统补丁号码 KB898461.exe KB893803.exe KB900930.exe 1.TXT为本机补丁号码 KB898461 KB893803 先讲2.TXT内KB898461.EXE的后缀名.EXE去掉输出为2.txt for /f "delims=." %%i in (2.txt) do echo %%i >>3.txt 对比1.TXT和3.TXT..将1.TXT和2.TXT内有的相同补丁号码去掉..输出4.TXT 将4.TXT内补丁号码甜加后缀名输出5.BAT for /f %%j in (4.txt) do echo %%j.exe /quiet /norestart /n >>5.bat 在运行5.BAT安装系统补丁 初步测试成功不过写的太长..请高手简化一下给点意见 |
|
| 第2楼 zh159 | 发表于 2007-02-04 12:16 |
| 金牌会员 发帖 1,467 积分 3,687 | |
|
就按照你的脚本方式,已经是很简化了,临时文件稍多点而已
|
|
| 第3楼 bbq123bbq | 发表于 2007-02-04 12:59 |
| 初级用户 发帖 77 积分 197 | |
|
我知道我没把临时文件删除...哪个好做所以我没做..我只做个大纲...还有个问题:的出5.BAT内容:
KB893803.exe KB898461.exe KB900930.exe KB887797.exe KB885836.exe KB873339.exe KB888113.exe 读取内容一行一行树着显示里面的内容,最好相隔2秒好给人知道需要安装那些系统补丁 |
|
| 第4楼 无奈何 | 发表于 2007-02-04 14:47 |
| 荣誉版主 发帖 356 积分 1,338 | |
|
RE bbq123bbq
你写的代码真的挺简短的,不过有些凌乱,要我做的话可能会这样完成,可以参考一下。
|
|
| 第5楼 bbq123bbq | 发表于 2007-02-04 16:04 |
| 初级用户 发帖 77 积分 197 | |
|
比我的好..不过有些地方不懂? findstr /x 打印完全匹配的行 用来对比"%%~ni" 1.txt 出来的结果和1.TXT匹配的补丁号码 , if ERRORLEVEL 1 是什么意思..echo 安装 %%~ni 显示矿充2.TXT里的文件名 %%i /quiet /norestart /n 安装2.TXT里的补丁
整段运行为什么只安装1.TXT里缺少而2.TXT里有的补丁 可以解释一下吗??我去掉@echo 看过运行过程还是不懂.... |
|
| 第6楼 zerocq | 发表于 2007-02-04 20:30 |
| 中级用户 发帖 196 积分 458 | |
|
for /f "delims=." %a in (2.txt) do @findstr /x %a 1.txt||%.exe /quiet /norestart /n
这样可以不,读取2.txt里的每一行在1.txt里查找,没找到就运行这个补丁??? |
|
| 第7楼 anqing | 发表于 2007-02-04 22:14 |
| 高级用户 发帖 413 积分 859 | |
|
findstr /v/g:1.txt 3.txt
这句是不是对比1和3中的文件,把不同的输出到4中? |
|
| 第8楼 bbq123bbq | 发表于 2007-02-05 08:01 |
| 初级用户 发帖 77 积分 197 | |
|
终于明白if ERRORLEVEL 1 意思..IF ERRORLEVEL 是用来测试它的上一个DOS命令的返回值的 if ERRORLEVEL 1 代表返回不成功 if ERRORLEVEL 0 代表返回成功...
|
|
| 第9楼 anqing | 发表于 2007-02-05 09:34 |
| 高级用户 发帖 413 积分 859 | |
|
我也学习了,以前一直写成if ERRORLEVEL ==1
看来以后可以少写两个=号了 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |