无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6701|回复: 9
打印 上一主题 下一主题

一个自动给install.wim集成补丁的批处理

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-10 14:11:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如发错版块请斑竹帮忙移一下~~
代码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo.&set b=0
  4. mode con cols=70 lines=40
  5. title Win7补丁打包程序
  6. cd /d "%~dp0"
  7. call :checkdism
  8. echo 请提供Win7的install.wim文件的完整路径(例如E:\sources\install.wim)
  9. echo 路径中有空格无需在外面加英文双引号。
  10. set /p installwimpath=路径:
  11. cls
  12. :patch
  13. echo 请提供放置补丁的文件夹的位置(例如F:\win7patchs)
  14. echo 路径中有空格无需在外面加英文双引号。
  15. set /p patchpath=路径:
  16. cd /d "%patchpaths%"
  17. for /f "delims=" %%a in ('dir /a-d /s ^|findstr /i /c:".msu"') do set /a b=!b!+1
  18. if /i "%b%"=="0" (
  19.     echo 未检测到补丁!
  20.     pause
  21.     goto :patch
  22. )
  23. cls
  24. echo 5为旗舰版,4为专业版,3为家庭高级版,
  25. echo 2为家庭普通版,1为初级版
  26. set /p jh=请提供install.wim的卷号:
  27. echo 在%patchpath%中检测到%b%个补丁。
  28. echo 操作%installwimpath%。
  29. set mountml="%Temp%\37285424"
  30. if not exist %mountml% md %mountml%
  31. "%dismpath%" /mount-wim /wimfile:"%installwimpath%" /index:%jh% /mountdir:"%Temp%\37285424"
  32. for %%1 in ("%patchpath%\*.msu") do (
  33.     echo 正在集成%%~nx1……
  34.     "%dismpath%" /image:"%Temp%\37285424" /add-packge /packgepath=%%1  
  35.     echo.
  36. )
  37. "%dismpath%" /image:"%Temp%\37285424" /get-packges
  38. pause
  39. exit
  40. :checkdism
  41. if exist "%~dp0/dism.exe" set dismpath="%~dp0/dism.exe"
  42. if not exist dism.exe (
  43.    echo 未检测到必须程序dism.exe!
  44.    echo 请提供其包括文件名的完整路径(类似于D:\abc\dism.exe)
  45.    echo 路径中有空格无需在外面加英文双引号。
  46.    set /p dismpath=请提供其包括文件名的完整路径:
  47. )
复制代码
感谢pznpt提供的帮助!
顺便当个for循环的实例~~
可惜没条件测试呀~~

[ 本帖最后由 2011czmxbb52 于 2012-2-19 08:27 编辑 ]
2#
发表于 2011-12-12 02:29:16 | 只看该作者
有机会测试一下。。。
回复

使用道具 举报

3#
发表于 2011-12-12 11:18:41 | 只看该作者

我也没法帮楼主测试,不过能给点改进的建议

原帖由 2011czmxbb52 于 2011-12-10 14:11 发表
for /f "delims=" %%a in ('dir /a-d /s ^|findstr /i /c:".msu"') do set /a b=!b!+1
if /i "%b%"=="0" (
    echo 未检测到补丁!
    pause
    goto :patch
)

上面这段,检测并统计补丁,如果补丁少效率没多少影响,但要是有个几百,上千个的话,用递归统计肯定会效率很差,
findstr /i /c:".msu"  统计的并不是补丁后缀名, 如这样的文件名: "kb77899.msu.我不是补丁.txt"
(微软就爱一月敲几个补巴.╮( ̄﹏ ̄)╭)
下面这段代码 不会有上面的两个BUG

  1. set b=
  2. for /f %%i in ('dir /a-d/s *.msu ^|find /c /v ".*"') do set "b=%%i"
  3. if not defined d  (
  4. echo.未检测到补丁!
  5. pause
  6. goto :patch
  7. )
复制代码

if exist "%~dp0/dism.exe" set dismpath="%~dp0/dism.exe"

"%~dp0"  己经包含了一个 正斜械 "\"  dism.exe  的赋值会有问题. 
( ̄▽ ̄)σ"
不知道WIN7 的BAT功能 带不带自动纠错
回复

使用道具 举报

4#
发表于 2011-12-13 14:28:29 | 只看该作者
请高手继续优化、完善一下,造福大家
回复

使用道具 举报

5#
 楼主| 发表于 2011-12-16 13:22:42 | 只看该作者
更新:已经把x9tian3#提出的建议更新进去,谢谢!源码:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo.&set b=0
  4. mode con cols=70 lines=40
  5. title Win7补丁打包程序
  6. cd /d "%~dp0"
  7. call :checkdism
  8. echo 请提供Win7的install.wim文件的完整路径(例如E:\sources\install.wim)
  9. echo 路径中有空格无需在外面加英文双引号。
  10. set /p installwimpath=路径:
  11. cls
  12. :patch
  13. echo 请提供放置补丁的文件夹的位置(例如F:\win7patchs)
  14. echo 路径中有空格无需在外面加英文双引号。
  15. set /p patchpath=路径:
  16. cd /d "%patchpaths%"
  17. set b=
  18. for /f %%i in ('dir /a-d/s *.msu ^|find /c /v ".*"') do set "b=%%i"
  19. if not defined d  (
  20. echo.未检测到补丁!
  21. pause
  22. goto :patch
  23. )
  24. cls
  25. echo 5为旗舰版,4为专业版,3为家庭高级版,
  26. echo 2为家庭普通版,1为初级版
  27. set /p jh=请提供install.wim的卷号:
  28. echo 在%patchpath%中检测到%b%个补丁。
  29. echo 操作%installwimpath%。
  30. set mountml="%Temp%\37285424"
  31. if not exist %mountml% md %mountml%
  32. "%dismpath%" /mount-wim /wimfile:"%installwimpath%" /index:%jh% /mountdir:"%Temp%\37285424"
  33. for %%1 in ("%patchpath%\*.msu") do (
  34.     echo 正在集成%%~nx1……
  35.     "%dismpath%" /image:"%Temp%\37285424" /add-packge /packgepath=%%1  
  36.     echo.
  37. )
  38. "%dismpath%" /image:"%Temp%\37285424" /get-packges
  39. pause
  40. exit
  41. :checkdism
  42. if exist "%~dp0dism.exe" set dismpath="%~dp0dism.exe"
  43. if not exist dism.exe (
  44.    echo 未检测到必须程序dism.exe!
  45.    echo 请提供其包括文件名的完整路径(类似于D:\abc\dism.exe)
  46.    echo 路径中有空格无需在外面加英文双引号。
  47.    set /p dismpath=请提供其包括文件名的完整路径:
  48. )
复制代码

[ 本帖最后由 2011czmxbb52 于 2012-2-19 08:28 编辑 ]
回复

使用道具 举报

6#
发表于 2015-6-1 15:27:14 | 只看该作者
sunsea 发表于 2011-12-16 13:22
更新:已经把x9tian在3#提出的建议更新进去,谢谢!源码:

[ 本帖最后由 2011czmxbb52 于 2012-2-19 08:28 ...

应当是 if not defined b    不是  d   

不好意思 我在三楼手误了
回复

使用道具 举报

7#
发表于 2015-6-1 17:12:19 | 只看该作者
恕我太白,不大看得懂上面的批处理。

乍一看标题,还以为连 补丁 都不要自己准备就能 自动集成 补丁呢。那可就真是我等小白梦寐以求的神作啦!

还有,如果 install.wim 中有 5 个映像文件的话,是不是 运行 1 次 就可以都打上补丁呢?还是要分别弄上5次(当然大家可能都只用旗舰版)?
回复

使用道具 举报

8#
发表于 2015-6-2 07:47:20 | 只看该作者
非常给力,谢谢分享!
回复

使用道具 举报

9#
发表于 2015-6-2 08:06:05 | 只看该作者
楼主辛苦 谢谢
回复

使用道具 举报

10#
发表于 2015-6-25 21:09:21 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 00:45

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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