无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 4659|回复: 14

[求助] 一看见变量就完了,求帮忙

[复制链接]
发表于 2017-5-18 10:24:46 | 显示全部楼层 |阅读模式
dir *-kb*.exe /b /o:n >list1.log
::将补丁文件按照名字排列存放在list1.log文件里
for /f "delims=- tokens=2" %%i in (list1.log) do REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\Volume" || dir /b *%%i*.exe >>list.log
::从list1.log文件中取出一个补丁的名字,截取中间的补丁标号(如KB873339),到注册表查询这个是否已经安装了,没有就将其存放到list.log文件里


上面这个筛选该怎么改?
发表于 2017-5-18 14:19:55 | 显示全部楼层
不懂帮顶
回复

使用道具 举报

 楼主| 发表于 2017-5-18 15:29:30 来自手机 | 显示全部楼层
谢谢。才发现win7的补丁列表注册表里可能还没有。
回复

使用道具 举报

发表于 2017-5-18 19:35:40 | 显示全部楼层
本帖最后由 freesoft00 于 2017-5-18 19:41 编辑

for /f "tokens=2" %%a in ('systeminfo^|findstr /i "kb"') do echo %%a
pause
回复

使用道具 举报

发表于 2017-5-18 20:18:46 | 显示全部楼层
  1. wmic qfe get hotfixid | findstr /i /v /g:"kblist.txt" /c:"HotfixID"
复制代码




假设需要安装的补丁列表文件是kblist.txt,文件内容格式每行一个补丁名称,类似于KB1234567,则上述命令会显示出没有安装的补丁。
回复

使用道具 举报

 楼主| 发表于 2017-5-18 21:26:26 | 显示全部楼层
获取已安装列表这几个方法都米问题
但是筛选还是做不来

点评

你都不会举一反三? wmic qfe get hotfixid >list1.log dir *kb*.exe /b /o:n | findstr /i /v /g:"list1.txt" /c:"HotfixID" findstr /V 只打印不包含匹配的行。 /G:file 从指定的文件获  详情 回复 发表于 2017-5-18 21:57
回复

使用道具 举报

发表于 2017-5-18 21:57:15 | 显示全部楼层
窄口牛 发表于 2017-5-18 21:26
获取已安装列表这几个方法都米问题
但是筛选还是做不来


你都不会举一反三?

wmic qfe get hotfixid >list1.log
dir *kb*.exe /b /o:n | findstr /i /v /g:"list1.txt" /c:"HotfixID"




findstr
/V         只打印不包含匹配的行。
/G:file    从指定的文件获得搜索字符串。



莫非你非要用变量的方法筛选?
回复

使用道具 举报

发表于 2017-5-18 22:02:59 | 显示全部楼层
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\Volume" || dir /b *%%i*.exe >>list.log

这句没什么用吧?

是否应该像下面这样写
REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\Volume" /v "%%i" || dir /b *%%i*.exe >>list.log
回复

使用道具 举报

 楼主| 发表于 2017-5-18 22:48:40 来自手机 | 显示全部楼层
本帖最后由 窄口牛 于 2017-5-19 08:04 编辑

那倒不是非要变量,达到目的就可以。目的是已经下载的补丁文件昨天可能已经安装过了,今天就不必再安装了。您的结果貌似还要下载那些已经打过却不再现在的文件夹里的补丁。
回复

使用道具 举报

 楼主| 发表于 2017-5-19 08:12:34 | 显示全部楼层
原来的
  1.   @echo off
  2.   ::关闭显示信息
  3.   cls
  4.   echo ================================================
  5.   del list.log /q
  6.   ::删除上次运行后留下的文件
  7.   dir *-kb*.exe /b /o:n >list1.log
  8.   ::将补丁文件按照名字排列存放在list1.log文件里
  9.   for /f "delims=- tokens=2" %%i in (list1.log) do REG QUERY "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix\%%i" || dir /b *%%i*.exe >>list.log
  10.   ::从list1.log文件中取出一个补丁的名字,截取中间的补丁标号(如KB873339),到注册表查询这个是否已经安装了,没有就将其存放到list.log文件里
  11.   
  12.   echo 现在开始安装补丁
  13.   for /f "eol=o eol=O " %%j in (list.log) do echo 正在安装补丁%%j && %%j /quiet /norestart
  14.   ::从list.log文件中取出一个补丁的名字,利用参数(/quiet /norestart)进行安装无人安装
  15.   
  16.   echo 恭喜你,补丁程序安装完毕
  17.   echo 安装了的补丁(list.log):& type list.log | more
  18.   ::显示安装了的补丁的列表,more是用来防止补丁过多,分屏显示用的
  19.   pause
  20.   ::暂停让别人看列表
  21.   del list1.log /q
  22.   ::删除使用过的list1.log文件
  23.   set /p YN=是否重新启动电脑,以使更改立即生效,强烈建议重新启动电脑[Y/N]?
  24.   if "%YN%" == "N" goto :EOF
  25.   if "%YN%" == "n" goto :EOF
  26.   shutdown -r -t 0
  27.   goto :EOF
复制代码

列表是完整名字,注册表是kbxxxxxx,长短不一样,所以筛选不了
回复

使用道具 举报

发表于 2017-5-19 11:22:43 来自手机 | 显示全部楼层
  1. color>list1.log
  2. for /f "delims=" %%a in ('dir *-kb*.exe /b /o:n') do (
  3.         setlocal enabledelayedexpansion
  4.         set kbname=%%~a
  5.         set kbname=!kbname:*-kb=!
  6.         for /f "tokens=1 delims=-" %%b in ("!kbname!") do echo kb%%b>>list1.log
  7.         endlocal
  8. )
复制代码


用上面的替代下面的
del list.log /q
  ::删除上次运行后留下的文件
  dir *-kb*.exe /b /o:n >list1.log
回复

使用道具 举报

发表于 2017-5-19 11:44:42 来自手机 | 显示全部楼层
其实个人感觉你这搞的太复杂了,装个补丁,不适用或安装过的是会跳过去的,只不过多了补丁解压时间,我想,你应该是想节省时间
回复

使用道具 举报

 楼主| 发表于 2017-5-19 12:15:12 来自手机 | 显示全部楼层
是的,维护通道里放着一堆补丁,每天都会运行,因为单位不是三五天就能所有的机器都开机激发维护通道,所以需要放一段时间。天天安装一堆补丁,影响工作。
回复

使用道具 举报

 楼主| 发表于 2017-5-19 12:15:51 来自手机 | 显示全部楼层
也就是这段时间,过后也就不需要了。
回复

使用道具 举报

 楼主| 发表于 2017-7-3 17:00:08 | 显示全部楼层
win7打补丁
  1. @echo off
  2. del list.log /q
  3. dir *-kb*.msu /b /o:n >a.txt
  4. for /f "tokens=2" %%a in ('systeminfo^|findstr /i "kb"') do echo %%a>>1.txt
  5. for /f "delims=^- tokens=1,*" %%a in (1.txt) do (echo %%a>>2.txt)
  6. del 1.txt /q
  7. for /f "delims=^_ tokens=1,*" %%a in (2.txt) do (echo %%a>>b.txt)
  8. del 2.txt /q
  9. findstr /V /I /G:b.txt a.txt > c.txt && move /y c.txt list.log
  10. del *.txt
  11. for /f "eol=o eol=O " %%j in (list.log) do echo 正在安装补丁%%j && start /wait wusa %%j /quiet /norestart
复制代码

xp打补丁
  1. @echo off
  2. del list.log /q
  3. dir *-kb*.exe /b /o:n >a.txt
  4. for /f "tokens=2" %%a in ('systeminfo^|findstr /i "kb"') do echo %%a>>1.txt
  5. for /f "delims=^- tokens=1,*" %%a in (1.txt) do (echo %%a>>2.txt)
  6. del 1.txt /q
  7. for /f "delims=^_ tokens=1,*" %%a in (2.txt) do (echo %%a>>b.txt)
  8. del 2.txt /q
  9. findstr /V /I /G:b.txt a.txt > c.txt && move /y c.txt list.log
  10. del *.txt
  11. for /f "eol=o eol=O " %%j in (list.log) do echo 正在安装补丁%%j && %%j /quiet /norestart

复制代码


接下来看看.net和office补丁
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 16:28

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表