[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助批处理自动批量打补丁的缺陷之处?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set /a num=0
  4. for %%i in (D:\补丁\*.exe) do (%%i  /passive /norestart /nobackup /quiet && set /a num+=1 && echo 已完成!num!个补丁程序  %%i。)
复制代码
这段代码就是自动安装d:\补丁\中的补丁程序,其中do中的三个语句实现的功能是:每当一个补丁程序完成之后,num加1,同时显示已完成了第几个补丁%%i。但有2个问题出现了,一个问题是/nobackup不是通用参数,对于某些补丁程序属于无效参数,所以尽管该补丁是可以正常运行的补丁,由于这个无效参数而不能运行,所以这里应该去掉该参数,我相信这个地方即使对于老鸟来说都是不容易察觉到的地方。另外一个问题,我目前仍不知如何解决,就是对于所有需要重启才能生效的补丁,执行了第一个语句“%%i  /passive /norestart /nobackup /quiet ”之后,该补丁确实安装了,但是即使你加了/norestart 参数,批处理程序仍然认为这个语句没有完成,所以第一个&&之后的语句均不执行,这样就造成一个问题,后面显示的已完成补丁程序的数量跟实际完成的数量不一样,换句话说,假设成功运行了10个补丁,其中有5个补丁是需要重启才可以生效的补丁,那么最终的显示结果却是已完成了5个补丁。请问各位,这个缺陷如何弥补?谢谢!

上面的代码仍然没有解决这个问题,其中含有/nobackup参数,就是错的,因为很多补丁是不支持这个参数的,还没等运行就会检测到参数错而终止掉,而实际上如果手动安装这个补丁却是可以执行的。

TOP

修改之后确实可以了,但仍然无法准确的报告那些需要重启才可以生效的补丁。

TOP

不适合根本无法安装的补丁。也就是说如果补丁无法安装的话,程序仍然报告重启后生效。

另外还想问以下版主,使用reg query命令查询注册表是否含有某补丁程序的名字的时候,如果查不到的话,会报找不到指定文件的错误。我不想让它报这个错,应该怎么写,后面加了>nul也没用,如果能想办法只取它的返回值作为下一步的判断条件也行。关键是怎么才能让它不显示那个错误。

TOP

巡查高见!果然解决了!谢谢!!

TOP

返回列表