无忧启动论坛

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

PE2.0,3.0,4.0 精简自动化测试批处理

[复制链接]
跳转到指定楼层
1#
发表于 2012-9-9 22:20:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
根据论坛资料,反复测试虽然成功精简掉了部分文件也加快了PE载入速度。但离预期效果还是很远。如果能将 X:\Windows\system32\ 根目录下的文件精简那离预期效果会更近一步。关键是对 system32 根目录下的文件精简时会出现载入PE失败和进入PE后蓝屏。而SYSTEM32 根目录下的文件又很多有500个(不包括子目录)。如果手动测试需要6天左右的时间,还得保证效率的情况下。所以自动化测试是很有必要的。(也同样适用于其他目录下的文件,你可能需要修改一下批处理,聪明的你一定能成功)


        1. 安照顺序从文件列表中读取 system32 根目录文件,每次读一个,并将其改成 *.bak 使其该文件失去作用。
        2. 制作成映像文件
        3. 启动VM,如果成功进入PE会在宿主机中指定位置写入一个文件作为成功标志,并且写入日志,如果在指定时间没有这个文件就视为失败,恢复这个文件,写入日志。
        4. 关闭VM,然后循环这一过程

需要 WimTool 和 oscdimg,请自行下载。还需要建立文件目录结构和准备相应的工具以及文件,如果你看的懂批处理就应该知道怎么做。

  1. @echo off

  2. setlocal enabledelayedexpansion

  3. title WIMLite

  4. rem 文件夹结构说明=======================
  5. rem 在D 盘建立 Temp 文件夹
  6. rem D:\Temp\winpe 放制作成ISO映像所需文件
  7. rem D:\Temp\lite 存放卸载wim 后的文件
  8. rem =====================================

  9. set counter=
  10. set a=
  11. set "kernelfile=system32filelist.log"
  12. set "wimdst=D:\Temp\winpe\iso\sources\boot.wim"
  13. set "wimsrc=D:\Temp\lite"
  14. set "sysdir=D:\Temp\lite\Windows\system32"
  15. set vmruname="D:\Program Files\VMware\VMware Workstation\vmrun.exe"
  16. set vmfilename="D:\Backup\我的文档\My Virtual Machines\Windows Server 2003 Enterprise Edition\Windows Server 2003 Enterprise Edition.vmx"

  17. set "flagfile=D:\Temp\hello.txt"
  18. set "errlogfile=errfile.log"
  19. set "sucesslogfile=sucessfile.log"

  20. set "etfsbootfilenmae=D:\Temp\winpe\etfsboot.com"
  21. set "sourcelication=D:\Temp\winpe\iso"
  22. set "tragetfile=D:\Temp\winpe.iso"

  23. rem 倒计时
  24. set "countime=70"

  25. rem 检查相关文件是否存在
  26. if not exist !vmruname! (
  27.      echo !vmruname! is missing.
  28.      echo Press any key to exit.
  29.      pause >nul
  30.      goto end)

  31. if not exist !vmfilename! (
  32.      echo !vmfilename! is missing.
  33.      echo Press any key to exit.
  34.      pause >nul
  35.      goto end)
  36.    
  37. echo 获取需要检查的文件数量
  38. if exist !kernelfile! (
  39.      for /f "delims=" %%i in (!kernelfile!) do (set /a a+=1)
  40. ) else (
  41.      echo !kernelfile! is missing.
  42.      echo Press any key to exit.
  43.      pause >nul
  44.      goto end)
  45.    
  46. for /f "delims= " %%i in (!kernelfile!) do (
  47.      echo.
  48.      echo 1. 删除成功标志文件
  49.      if exist !flagfile! del !flagfile!

  50.      echo 2. 重命名文件 %%i
  51.      ren !sysdir!\%%i %%i.bak

  52.      rem 恢复文件
  53.      rem ren !sysdir!\%%i %%i..

  54.      set /a counter+=1
  55.      title WIMLite 正在测试的文件 %%i 这是第 !counter! 个,总共 !a! 个

  56.      if exist !wimdst! (
  57.           echo 3. 追加映卷
  58.           WimTool.EXE  /Boot  /Append  !wimsrc!  !wimdst!  "MyTools"
  59.      ) else (
  60.           echo 3. 制作映像
  61.           WimTool.EXE /Boot /Compress Maximum /Capture !wimsrc! !wimdst! "MyTools")
  62.      if not exist !wimdst! (
  63.           echo !wimdst! is missing.
  64.           echo Press any key to exit.
  65.           pause >nul
  66.           goto end)

  67.      echo 4. 制作成ISO文件,减少将映像文件写入U盘所占用的时间
  68.      Oscdimg.exe -n -b!etfsbootfilenmae! !sourcelication!  !tragetfile!
  69.      if not exist !tragetfile! (
  70.           echo !tragetfile! is missing.
  71.           echo Press any key to exit.
  72.           pause >nul
  73.           goto end)

  74.      echo 5. 启动虚拟机测试
  75.      !vmruname! start !vmfilename!

  76.      echo 6. 开始计时,必须在 !countime! 秒内写入成功标志,否则视为失败。
  77.      ping -n !countime! 127.0.0.1 >nul

  78.      rem 判断此文件删除是否会影响 PE 正常运行
  79.      if exist !flagfile! (
  80.           echo 7. %%i 可以删除,写入可以删除日志
  81.           echo %%i >>!sucesslogfile!
  82.      ) else (
  83.           echo 7. %%i 不能删除,正在恢复文件 %%i,写入不能删除日志
  84.           ren !sysdir!\%%i.bak %%i
  85.           echo %%i >>!errlogfile!
  86.      )

  87.      rem echo 这里暂停一下,检查相关文件,检测批处理是否按照预期运作
  88.      rem pause
  89.      echo 8. 关闭虚拟机为下一次测试做好准备
  90.      !vmruname! stop !vmfilename!
  91. )

  92. rem 如果有错误产生就暂停,方便查看故障原因
  93. if %errorlevel%==1 pause

  94. :end
  95. exit
复制代码


欢迎转载,但请注明。谢谢!
2#
发表于 2012-9-9 22:39:07 | 只看该作者
这效率是相当的低啊!
回复

使用道具 举报

3#
发表于 2012-9-10 10:03:37 | 只看该作者
谢谢分享的文章,效率高低无所谓,分享第一!
回复

使用道具 举报

4#
 楼主| 发表于 2012-9-10 12:20:02 | 只看该作者

回复 #2 eyinhe 的帖子

欢迎赐教。笨方法完全不参考别人已有的文件情况下完成。独立完成减少分析的工作量。当然也有别人已经精简好了的作品,只要拿过来直接就可以用,但就失去了自己研究的意义。
回复

使用道具 举报

5#
发表于 2012-9-10 12:31:59 | 只看该作者
不如用robocopy,能节约90%以上的时间.
回复

使用道具 举报

6#
发表于 2012-9-10 12:49:12 | 只看该作者
你参考下pe3.1的白皮书。dism有个参数可以记录载入系统用到哪些文件。
回复

使用道具 举报

7#
 楼主| 发表于 2012-9-10 13:02:07 | 只看该作者

回复 #5 xhwfq 的帖子

robocopy 只是完成复杂复制,并不能检查哪些文件能删除,哪些文件不能删除。
回复

使用道具 举报

8#
发表于 2012-9-10 13:22:31 | 只看该作者

回复 #7 2012q891052089 的帖子

只要用robocopy将启动以后被调用过的文件复制出来就行了.
回复

使用道具 举报

9#
 楼主| 发表于 2012-9-10 13:35:17 | 只看该作者

回复 #8 xhwfq 的帖子

问题是,哪些文件被调用过!谢谢!
回复

使用道具 举报

10#
发表于 2012-9-10 13:39:39 | 只看该作者
回复

使用道具 举报

11#
 楼主| 发表于 2012-9-10 13:45:56 | 只看该作者

回复 #10 xhwfq 的帖子

非常感谢,这确实是个好方法。根据文件访问时间来确认系统调用了那些文件。
回复

使用道具 举报

12#
 楼主| 发表于 2012-9-10 13:47:07 | 只看该作者

回复 #6 ramos 的帖子

你好,我看了一下 DISM 有个参数可以查看载入了那些映像,但没有看到可以记录载入系统用到哪些文件。谢谢!
回复

使用道具 举报

13#
 楼主| 发表于 2012-9-11 18:41:49 | 只看该作者

回复 #10 xhwfq 的帖子

经过测试,此方法并没有达到预期的效果,因为访问时间需要载入PE之后才能生效。所以 failed..
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-7-24 01:17

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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