无忧启动论坛

标题: 【原创】TXTSETUP.SIF减肥和检查错误批处理TSLite V0.9(4月29日更新) [打印本页]

作者: NicTense    时间: 2010-3-10 14:53
标题: 【原创】TXTSETUP.SIF减肥和检查错误批处理TSLite V0.9(4月29日更新)
原文出自:http://hi.baidu.com/nictense/blog/item/585b9f09369efbda62d986fc.html (更新版将第一时间于该地址公布)

下版考虑增加3个功能:1、增加行标准格式化处理 2、可选删除注释 3、对[SourceDisksFiles]段多余行的处理(0.9已实现)

更新记录:

4月29日:增加对[SourceDisksFiles]段的处理,同时修正0.8Beta版的一个Bug,因优先级问题,原来对包含CC_段的HWID的精简算法有误,可能会导致个别IDE硬盘找不到硬盘。

3月22日:V0.85 Specail 应zhaohj要求,在V0.8Beta的基础上增加自动合并SUBSYS项功能,可以进一步增强减肥效果,但合并后所有子ID都会被指定使用同一驱动,这对某些特殊型号可能会导致未知错误,故此版定为特殊版,用户可根据自身需要选用。 (暂时取消此版下载)

3月20日:V0.8Beta 进一步改善逻辑重复算法,新版可以查出所有逻辑重复项。另增加对同一HWID指定多个驱动的错误的判断。

3月11日:V0.7Beta 更新了一下代码,对逻辑重复的判断更为全面。


正文:

在反复添加磁盘等驱动后,txtsetup.sif文件很容易变得越来越臃肿,重复和错误在所难免

这个批处理就是为了解决这个问题的,可以自动将重复和逻辑重复的行精简掉

并将精简掉的内容另存为lite.txt,以便查对。

0429以后版本增加对[SourceDisksFiles]段的处理,可以精简掉该段没用的项目,对缺失的则自动补齐必要的信息。

将批处理和txtsetup.sif文件放到同一个目录,并执行批处理即可

下载: tslite.rar (1.02 KB, 下载次数: 1300) ( V0.9,解压密码:www.147.cn )

本工具为无损精简,仅删除多余的语句,不必担心会产生什么不良的后果。

另,如果同一个hwid被指定了2个或以上的驱动,本工具还会找出该错误,并保存到error.txt中,该错误需要手工处理,决定保留其中哪一项。

目前仅处理[HardwareIdsDatabase]部分(主要重复的也就是这部分),有空再加入其他部分的处理


V0.8 实测效果:

我心如水_SERVER_2003_PE_V13.22_维护版

减肥前:97k,减肥后:91k,删除多余行:94行,减肥效果6K

我心如水_XP_PE_V13.22

减肥前:109k,减肥后:87k,删除多余行:350行,减肥效果22k

天琴星座090226龙抬头版

减肥前:108k,减肥后:86kb,删除多余行:339行,减肥效果22K

注:N版原版方案中也有逻辑重复项,不过很少


源代码如下:( TSLite V0.9)
  1. @echo off
  2. setlocal enableextensions
  3. setlocal enabledelayedexpansion
  4. set f=txtsetup.sif
  5. set fn=temp.sif
  6. set fb=txtsetup.bak
  7. set fl=lite.txt
  8. set fe=error.txt
  9. set lite=
  10. if not exist %f% goto error1
  11. title TSLite V0.9 by NicTense
  12. mode con cols=90 lines=30
  13. echo.
  14. echo                             TXTSETUP.SIF 一键减肥批处理 V0.9
  15. echo.
  16. echo                                 Nictense 写于 2010.04.29
  17. echo.
  18. :loop1
  19. set /p LiteSDF=是否处理[SourceDisksFiles]段(Y/N):
  20. if /i "%LiteSDF%" neq "Y" if /i "%LiteSDF%" neq "N" goto loop1
  21. for %%a in (%fn% %fl% %fe%) do if exist %%a del /q %%a >nul
  22. echo.&echo 正在精简!f!,请稍候...
  23. echo.
  24. for /f "tokens=*" %%a in (%f%) do (
  25. set t=%%a
  26. set t=!t: =!
  27. if "!t:~0,1!"=="[" set item=!t!
  28. if /i "!item!"=="[HardwareIdsDatabase]" (
  29. for /f "tokens=1 delims=;" %%b in ("!t!") do set t=%%b
  30. set t1=
  31. set t2=
  32. set t3=
  33. set t4=
  34. set y=
  35. for /f "tokens=1,* delims==" %%c in ("!t!") do (
  36. set driver=%%d
  37. set driver=!driver:"=""!
  38. set s=%%c
  39. for /f "tokens=1,2,3,4 delims=&" %%i in ("!s!") do (
  40. set t1=%%i
  41. if not "%%j"=="" set t2=%%i^&%%j
  42. if not "%%k"=="" set t3=%%i^&%%j^&%%k
  43. set t4=%%l
  44. )
  45. )
  46. if not "!t!"=="[HardwareIdsDatabase]" (
  47. if not "!t2!"=="" find /i "!t1!=!driver!" !f! >nul && set y=y
  48. if "!y!"=="" if not "!t3!"=="" find /i "!t2!=!driver!" !f! >nul && set y=y
  49. if "!y!"=="" if not "!t4!"=="" find /i "!t3!=!driver!" !f! >nul && set y=y
  50. if "!y!"=="" find /i "!s!=!driver!" !fn! >nul && set y=y
  51. )
  52. if "!y!"=="" (
  53. find /i "!s!=" !fn! >nul && echo %%a>>!fe! && set y=e
  54. if "!y!"=="" echo %%a>>!fn!
  55. ) else echo 删除行 %%a & set "lite=y" & echo %%a>>!fl!
  56. ) else (
  57. if /i "%LiteSDF%"=="Y" (
  58. if "!item!"=="[SourceDisksFiles]" (
  59. if "!t!"=="[SourceDisksFiles]" (
  60. echo [SourceDisksFiles]>>!fn!
  61. echo c_936.nls=100,,,,,,,2,0,0,,1,2 >>!fn!
  62. echo kdcom.dll=100,,,,,,,2,0,0,,1,2 >>!fn!
  63. echo ntdll.dll=100,,,,,,,2,0,0,,1,2 >>!fn!
  64. echo ntoskrnl.exe=100,,,,,,,2,0,0,,1,2 >>!fn!
  65. echo setupreg.hiv=100,,,,,,,2,0,0,,1,2 >>!fn!
  66. echo vgaoem.fon=100,,,,,,,2,0,0,,1,2 >>!fn!
  67. set lite=s
  68. echo [SourceDisksFiles]段处理完毕!&echo.
  69. )
  70. ) else echo %%a>>!fn!
  71. ) else echo %%a>>!fn!
  72. )
  73. )
  74. if "%Lite%"=="" (
  75. echo 该文件不需要精简!
  76. del /q %fn% >nul
  77. ) else (
  78. echo.
  79. echo 完成!原文件已备份为 %fb%
  80. if "%Lite%"=="y" echo.&echo 精简部分(不包括[SourceDisksFiles]段)已保存为 %fl%
  81. move /y %f% %fb% >nul
  82. move /y %fn% %f% >nul
  83. )
  84. if exist %fe% echo.&echo 一些错误需要手工处理,具体请查看 %fe% 文件
  85. goto end
  86. :error1
  87. echo 找不到文件 %f%
  88. :end
  89. echo.
  90. echo 按任意键退出!
  91. pause>nul
复制代码
本人近期发布帖子汇总,方便查询

【下载】Tango WinPE 2010 虎年珍藏版,32M新版XP3内核PE

【原创】为你的PE系统添加计算机型号和CPU识别功能

【原创】TXTSETUP.SIF减肥和检查错误批处理TSLite

【原创】玩转PE墙纸(开机随机显示墙纸+一键切换循环显示)

【下载】通用型PE一键美化工具PEBeautify+TangoPE美化包(PE美化,只需10秒)

【分享】利用PECMD和MSPAINT实现零体积一键截图功能

【原创】shell32.dll的终极精简&美化教程 (这个是很久前的了)

[ 本帖最后由 NicTense 于 2010-4-29 19:10 编辑 ]
作者: caomaoLBL    时间: 2010-3-10 15:11
绝对是好东西,第一个支持!
作者: yyjdelete    时间: 2010-3-10 15:53
逆天使兄的批处理编的真好
作者: sunhl    时间: 2010-3-10 16:00
恩,实用的东东。在这混了好多年,像楼主这样的人很少见,敬佩你!
作者: bank-w3000    时间: 2010-3-10 17:10
支持一下,感谢楼主分享!
作者: lsp19880301    时间: 2010-3-10 17:46
呵呵。。不错的东西。。。哦。收藏先
作者: ls68057121    时间: 2010-3-10 18:25
不拿不行,拿了就顶,我顶顶顶
作者: viptks    时间: 2010-3-10 18:35
帮顶,虽然目前自己懒的动手,下载备用
作者: 网虫2008    时间: 2010-3-10 18:50
这东西好,,我顶!!

不过记得毛桃兄最开始的TXTSETUP.SIF中,有些项目是特意重复的,
作者: 老鼠无敌    时间: 2010-3-10 19:31
好东西啊,高手啊好。。。。。。
作者: lzys    时间: 2010-3-10 19:38
省了好多事,谢谢!试一试去!
作者: cmdy268    时间: 2010-3-10 20:55
确实好东西,谢谢分享!
作者: 66369    时间: 2010-3-10 21:10
天使就是特别哈.支持后再仔细看............
作者: wenjx5228    时间: 2010-3-10 21:15
这种人才,
让无忧技术氛围与众不同!
不佩服就是与自己过不去!
作者: 小咕咚    时间: 2010-3-10 21:28
不顶不行,先收藏再说!
作者: linyehua    时间: 2010-3-10 21:47
天使兄有这么好的东西分享,太感谢了!
作者: NicTense    时间: 2010-3-10 22:21
原帖由 网虫2008 于 2010-3-10 18:50 发表
这东西好,,我顶!!

不过记得毛桃兄最开始的TXTSETUP.SIF中,有些项目是特意重复的,


具体说一下,我现在对txtsetup还是一知半解,所以有些地方不敢动手

我只研究过天琴的文件,貌似可以精简掉的地方还是挺多的

不过老毛桃很多地方的写法都有一些小问题的,很多一直沿用至今

[ 本帖最后由 NicTense 于 2010-3-10 22:55 编辑 ]
作者: tzxinqing    时间: 2010-3-11 00:00
逆天使也是高人。。。。
作者: yuan_53770    时间: 2010-3-11 00:04
好东西,支持一个。

对9楼的问题比较关注。
作者: 网虫2008    时间: 2010-3-11 08:43
原帖由 NicTense 于 2010-3-10 22:21 发表


具体说一下,我现在对txtsetup还是一知半解,所以有些地方不敢动手

我只研究过天琴的文件,貌似可以精简掉的地方还是挺多的

不过老毛桃很多地方的写法都有一些小问题的,很多一直沿用至今


我对这个问题也是一知半解,只是N久之前看到过相关的帖子,现在找不到了......

要不问下netwinxp和dve008吧,他们一定能给你个好的建议。
作者: rock269    时间: 2010-3-11 09:05
好东东哦,支持一下,下载试试
作者: NicTense    时间: 2010-3-11 11:03
原帖由 网虫2008 于 2010-3-11 08:43 发表


我对这个问题也是一知半解,只是N久之前看到过相关的帖子,现在找不到了......

要不问下netwinxp和dve008吧,他们一定能给你个好的建议。


其实像这样你不如不说,据我所知,没有什么需要特意重复的
作者: 网虫2008    时间: 2010-3-11 11:23
原帖由 NicTense 于 2010-3-11 11:03 发表


其实像这样你不如不说,据我所知,没有什么需要特意重复的


我只是找不到相关帖子给你看了。

记得好像是什么识别顺序呀之类的原因。如果你觉得没必要,当我没说好了。
作者: zhaohj    时间: 2010-3-11 11:25
能否增加合并功能,如:
PCI\VEN_8086&DEV_27c3&SUBSYS_10a51734="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_834E1033="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_82E81033="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_83511033="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_83521033="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_27C31458="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_27C01458="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_819E1043="MegaSR"
如果没有其他PCI\VEN_8086&DEV_27c3=***,就合并PCI\VEN_8086&DEV_27c3="MegaSR"
作者: NicTense    时间: 2010-3-11 11:28
原帖由 zhaohj 于 2010-3-11 11:25 发表
能否增加合并功能,如:
PCI\VEN_8086&DEV_27c3&SUBSYS_10a51734="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_834E1033="MegaSR"
PCI\VEN_8086&DEV_27c3&SUBSYS_82E81033="MegaSR"
PCI\VEN_8086&DEV_27c3&SU ...


这个可以实现,但是我不确定这样是否会出问题

n版加驱动的时候貌似有些觉得驱动可能有问题就放弃了,也就是说,宁可不显示硬盘

如果这样子改的话,有可能会出现一种情况

就是本来可能是无驱动的情况,硬着头皮给他驱动,结果就蓝屏了

另外就是,批处理的字符处理能力非常差,像这种估计得2次扫描才能实现,效率比较低
作者: NicTense    时间: 2010-3-11 11:31
原帖由 网虫2008 于 2010-3-11 11:23 发表


我只是找不到相关帖子给你看了。

记得好像是什么识别顺序呀之类的原因。如果你觉得没必要,当我没说好了。


没别的意思,别误会,我是说,如果制造了一个模棱两可的疑团,又不能说清楚,还不如没有这个疑团
作者: zhaohj    时间: 2010-3-11 11:48
原帖由 NicTense 于 2010-3-11 11:28 发表


这个可以实现,但是我不确定这样是否会出问题

n版加驱动的时候貌似有些觉得驱动可能有问题就放弃了,也就是说,宁可不显示硬盘

如果这样子改的话,有可能会出现一种情况

就是本来可能是无驱动的情 ...


主要的解决驱动外置的问题。现在的[HardwareIdsDatabase]部分越来越大,CHKPCI是有限制的,不可以超过60KB。
N版也久未放出新的版本。
作者: NicTense    时间: 2010-3-11 13:54
更新了一下代码,对逻辑重复判断更全面,实际测试多删除了2行

相关原理已向n版求证过,实为无损精简,不会有任何负作用

下一步考虑对[SourceDisksFiles]部分进行精简
作者: Medivh    时间: 2010-3-11 15:14
收藏樓主好東東。。謝謝分享。
作者: lm0006    时间: 2010-3-11 18:23
感谢分享和提供下载了 呵呵
作者: slore    时间: 2010-3-11 20:12
脚本的话,还是VBS对字符处理方便些效率高些,bat还是较大差距。
作者: NicTense    时间: 2010-3-11 20:20
原帖由 slore 于 2010-3-11 20:12 发表
脚本的话,还是VBS对字符处理方便些效率高些,bat还是较大差距。


确实是,但是vbs脚本不是每台电脑都能执行的,下次有空用vbs脚本写一个试试
作者: kkwy    时间: 2010-3-12 08:26
PCI\VEN_1000&DEV_0626&SUBSYS_10101000="symmpi"
PCI\VEN_1000&DEV_0626&SUBSYS_10201000="symmpi"
PCI\VEN_1000&DEV_0628&SUBSYS_50301000="symmpi"

被精简掉了,但是并非重复和逻辑重复的行
作者: wenjx5228    时间: 2010-3-12 09:03
天使的乐园去过几回,
藏龙卧虎!
作者: myBOOT    时间: 2010-3-12 09:56
不错。CMD用的熟练。
不知道转PowerShell如何?
作者: NicTense    时间: 2010-3-12 10:02
原帖由 myBOOT 于 2010-3-12 09:56 发表
不错。CMD用的熟练。
不知道转PowerShell如何?

PowerShell还没研究过,不过这个比vbs更严重,估计过半的电脑都没装
作者: yinyuan    时间: 2010-3-12 11:20
试过后发现,如:
设备id相同,子设备id不同的语句有多条,这个批处理就会把子设备id删除,变成一条只有设备id没有子设备id的语句。这样不知道会出会认错驱动。

其实EmEditor这个程序有“去除重复行”的功能。大家可以试一试。
作者: NicTense    时间: 2010-3-12 11:28
原帖由 yinyuan 于 2010-3-12 11:20 发表
试过后发现,如:
设备id相同,子设备id不同的语句有多条,这个批处理就会把子设备id删除,变成一条只有设备id没有子设备id的语句。这样不知道会出会认错驱动。

其实EmEditor这个程序有“去除重复行”的功能 ...


单独删重复行作用不大,主要就是为了删逻辑重复
也就是你说的情况

当存在子设备id时,会检测是否存在父级记录项,如果存在且用的驱动一样的话,这个包含子设备的记录就是多余的
作者: NicTense    时间: 2010-3-12 12:39
原帖由 kkwy 于 2010-3-12 08:26 发表
PCI\VEN_1000&DEV_0626&SUBSYS_10101000="symmpi"
PCI\VEN_1000&DEV_0626&SUBSYS_10201000="symmpi"
PCI\VEN_1000&DEV_0628&SUBSYS_50301000="symmpi"

被精简掉了,但是并非重复和逻辑重复的行


你看看是不是存在

PCI\VEN_1000&DEV_0626="symmpi"

的记录项,如果是的话,这些都是逻辑重复,没用的项
作者: tianzone    时间: 2010-3-12 13:50
这样大概能缩小多大?
作者: slipper    时间: 2010-3-14 21:01
正为此事烦恼,现在终于解决了,谢谢!
作者: NicTense    时间: 2010-3-14 23:18
原帖由 tianzone 于 2010-3-12 13:50 发表
这样大概能缩小多大?


要看具体情况的,可能可以减小几十K,也可能一行都不减
作者: NicTense    时间: 2010-3-22 02:01
3月22日:进一步改善逻辑重复算法,新版可以查出所有逻辑重复项。另增加对同一HWID指定多个驱动的错误的判断。
作者: nytc006    时间: 2010-3-22 02:26
请教一下楼主
[SourceDisksFiles]
l1c51x86.sys=1,,,,,,4_,4,1,,,1,4

后面的这些=1,,,,,,4_,4,1,,,1,4
数字是什么意思,有何作用?

我想自己添加我的网卡驱动,用你的工具。
别的都搞好了,只是这里不知道写什么。。。

谢谢!!
作者: NicTense    时间: 2010-3-22 02:33
原帖由 nytc006 于 2010-3-22 02:26 发表
请教一下楼主
[SourceDisksFiles]
l1c51x86.sys=1,,,,,,4_,4,1,,,1,4

后面的这些=1,,,,,,4_,4,1,,,1,4
数字是什么意思,有何作用?

我想自己添加我的网卡驱动,用你的工具。
别的都搞好了,只是这里不 ...


刚想睡觉,看到了就顺便回答一下

第一个1对应[SourceDisksNames],原版xp或者xp2/xp3,实际上是无所谓的,写1就行了

那6个逗号,你就理解为规定的就行了

第二个,数字代表第几张盘,pe里实际上是多余的,写几都一样,_在数字前代表源文件未压缩,在后代表已压缩

第三个数字4,这个很重要,代表放到哪个目录下,对应 [WinntDirectories]

后面的几个是代表复制方式的,具体几代表几忘记了,你搜一下老毛桃的帖子,有介绍的
作者: zhaohj    时间: 2010-3-22 08:25
支持更新!不过P处理的效率真不敢当。
PE下使用,下面的行是可以精简的,如:父设备PCI\VEN_1002&DEV_4380只包含下列
PCI\VEN_1002&DEV_4380&CC_0101="amdide";ATI SB6xx SATA IDE
PCI\VEN_1002&DEV_4380&SUBSYS_01231025="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_01241025="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_01FA1028="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_01FC1028="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_01FD1028="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_02041028="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_02061028="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0611A0A0="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0614A0A0="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0C8D105B="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0E0A105B="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0E0C105B="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0E0D105B="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_0E0E105B="AHCI8086"
PCI\VEN_1002&DEV_4380&SUBSYS_100415BD="AHCI8086"
...
就可以精简为:
PCI\VEN_1002&DEV_4380&CC_0101="amdide";ATI SB6xx SATA IDE
PCI\VEN_1002&DEV_4380="AHCI8086"

就是说要增加一个合并功能,不过P处理很难做到。
作者: loveelva30    时间: 2010-3-22 08:36
啊?哈哈。。刻意重复?
作者: NicTense    时间: 2010-3-22 10:44
原帖由 zhaohj 于 2010-3-22 08:25 发表
支持更新!不过P处理的效率真不敢当。
PE下使用,下面的行是可以精简的,如:父设备PCI\VEN_1002&DEV_4380只包含下列
PCI\VEN_1002&DEV_4380&CC_0101="amdide";ATI SB6xx SATA IDE
PCI\VEN_1002&DEV_4380&SU ...


批处理可以做到,虽然效率上不怎么样
这个效率的问题其实也不是问题,如果你人工检查,可能几个小时都未必能检查完,用这个批处理也就3分钟左右
这三分钟你点一下,然后就可以做其他事情去了,所以也不是问题

问题是,这样改在某些情况下会出问题,具体25楼说了
如果这么做了,就不是无损精简了
我得先研究一下这样可不可行
作者: NicTense    时间: 2010-3-22 15:05
V0.85 Specail 应zhaohj要求,在V0.8Beta的基础上增加自动合并SUBSYS项功能,合并后所有子ID都会被指定使用同一驱动,这对某些特殊型号可能会导致未知错误,故此版定为特殊版,用户可根据自身需要选用
作者: 冷山    时间: 2010-3-22 16:15
很怪异,老狂03PE,减肥前103K,减肥后79K,压缩之后由17K,变成15K,小了2K,放回PE核心,也是小了2K,这里正常,可是CAB压缩后反而比原来大了3K,都是最大压缩,怎么会这样呢?
作者: NicTense    时间: 2010-3-22 16:33
原帖由 冷山 于 2010-3-22 16:15 发表
很怪异,老狂03PE,减肥前103K,减肥后79K,压缩之后由17K,变成15K,小了2K,放回PE核心,也是小了2K,这里正常,可是CAB压缩后反而比原来大了3K,都是最大压缩,怎么会这样呢?


压缩之后的大小,貌似文件不改,每次压缩之后都不一样,应该算是误差吧

其实txtsetup.sif减肥并不是为了最终内核的is_文件少那1、2k,而是为了加快启动速度,因为这个文件是在启动的时候,系统读入这些一项一项地去检测和加载驱动的
作者: 冷山    时间: 2010-3-22 16:40
标题: 回复 #51 NicTense 的帖子
现在基本确定是NTFS的缘故,谢谢天使大大
作者: birdn    时间: 2010-3-22 18:20
羡慕楼主!~
弱弱地问下...怎样才能学好批处理...
作者: gamegm    时间: 2010-3-22 18:48
很强大的 批处理
作者: NicTense    时间: 2010-3-22 20:03
原帖由 birdn 于 2010-3-22 18:20 发表
羡慕楼主!~
弱弱地问下...怎样才能学好批处理...


http://bbs.wuyou.net/forum.php?mod=viewthread&tid=128552&extra=page%3D1

看这个,我大概只看了1/10,太长了,你看完就肯定比我厉害了
作者: pzppzp    时间: 2010-3-22 21:20
高人,强人,顶顶顶顶顶顶顶顶
作者: netwinxp    时间: 2010-3-22 21:36
有酱紫一个原则——
当等号右边不一样,左边兼容(不完全一样),不能简单视为重复,这种是为了区别用相同VENID+DEVID,但硬件却不完全一样,并且驱动不兼容的特例,比如
PCI\VEN_8086&DEV_27C3&SUBSYS_3206103C="arrich";HP ADPTEC嵌入模式
PCI\VEN_8086&DEV_27c3&SUBSYS_27C31458="megasr";Gigabyte LSI嵌入模式
PCI\VEN_8086&DEV_27C3="IASTOR75"
前面两条和第三条并不重复。
作者: NicTense    时间: 2010-3-22 21:49
原帖由 netwinxp 于 2010-3-22 21:36 发表
有酱紫一个原则——
当等号右边不一样,左边兼容(不完全一样),不能简单视为重复,这种是为了区别用相同VENID+DEVID,但硬件却不完全一样,并且驱动不兼容的特例,比如
PCI\VEN_8086&DEV_27C3&SUBSYS_3206103 ...


这个我知道,所以这个批处理不会处理这样的情况的,只有当前面两条所用的驱动和最后一条的驱动一样的时候,才会被视为逻辑重复精简掉,否则会保留的

原理上应该是对的,源程序我自己检查过应该是没问题了,也测试过了

n版如果有空的话,帮我测试一下是否有bug什么的,
作者: zhaohj    时间: 2010-3-23 23:25
希望继续更新,换一种效率更高的编程风格。
外置SRS驱动最简单的方法,就是拷贝人家PE已经内置的驱动为自己所用。但现在的SIF文件太臃肿了,要外置只有减肥。
楼主的工具,还是很有实用价值!
作者: netwinxp    时间: 2010-3-23 23:31
嘿嘿,新方案里面会包含大多数服务器及板卡的驱动,也会精简掉绝大多数pciide的hwid,不过 hwid增加比较多,sif不一定会缩小:)
另外有个好消息——Iastor9.6蓝屏问题解决了。
作者: nobodytt    时间: 2010-3-23 23:42
一点都不懂 TXTSETUP.SIF ,有一点疑问,如果同一个hwid被指定了2个或以上的驱动,会不会是当某个驱动安装不成功时自动加载另一个驱动?如果不是,该如何判断要去掉哪一个多余的驱动呢?
作者: tzxinqing    时间: 2010-3-24 00:04
帮顶,虽然目前自己懒的动手,下载备用
作者: NicTense    时间: 2010-3-24 20:57
原帖由 zhaohj 于 2010-3-23 23:25 发表
希望继续更新,换一种效率更高的编程风格。
外置SRS驱动最简单的方法,就是拷贝人家PE已经内置的驱动为自己所用。但现在的SIF文件太臃肿了,要外置只有减肥。
楼主的工具,还是很有实用价值!


换成asp,做成一个网页,贴上去,处理后显示出来,加个复制到剪贴板的链接怎么样


@nobodytt

这个问题我回答不了你,不过我估计不会自动用另外一个去替代,而是会按某种优先原则,只有一个会起效果,至于是第一个起效果,还是第二个,没测试过
作者: zhaohj    时间: 2010-3-24 23:34
当然是谁先匹配谁先优先。如果VEN_DEV段相同,先匹配CC段,其次subsys段,再VEN_DEV段先后,谁先就谁先占用。
作者: zhaohj    时间: 2010-3-24 23:37
[quote]原帖由 NicTense 于 2010-3-24 20:57 发表


换成asp,做成一个网页,贴上去,处理后显示出来,加个复制到剪贴板的链接怎么样[quote]

放出来我先试试。
作者: secowu    时间: 2010-3-25 07:56
这个批处理写的太牛了
作者: NicTense    时间: 2010-3-25 11:31
原帖由 zhaohj 于 2010-3-24 23:37 发表
[quote]原帖由 NicTense 于 2010-3-24 20:57 发表


换成asp,做成一个网页,贴上去,处理后显示出来,加个复制到剪贴板的链接怎么样[quote]

放出来我先试试。


现在没空,我这人记忆力非常不好,几天不用的东西就忘光了,所以现在又忘了asp怎么写了

过阵子我写网页的时候再顺便写一个,不过貌似这个效率也不是太高

等偶有时间研究一下 powerbasic 再写一个专用的程序吧,像 txtsetup.exe 那样的,字符处理可以瞬间完成,无需等待


对了,有个问题我在想是不是应该改变一下处理方法

就是现在,当一个HWID被指定2个不同的驱动时,程序是把2个都保留的,并在error.txt中列出第二个(如果有第三,第四一并列出,但是统统保留)

是不是应该改为只保留第一个比较合理呢?
作者: zhaohj    时间: 2010-3-25 17:50
一定要保留的。不同的设备之间有可能HWID是重叠的,这个时候就要用到subsys、cc段了。
如LSI的symmpi、lsi_sas,区分XP与03驱动,HWID是重叠的,这要手工处理了。
作者: NicTense    时间: 2010-3-25 19:08
原帖由 zhaohj 于 2010-3-25 17:50 发表
一定要保留的。不同的设备之间有可能HWID是重叠的,这个时候就要用到subsys、cc段了。
如LSI的symmpi、lsi_sas,区分XP与03驱动,HWID是重叠的,这要手工处理了。


我的意思是包括rev cc段在内完全重合,也就是同样的硬件指定了2个驱动的情况下,实际上后面那个保留了也是没用的
作者: netwinxp    时间: 2010-3-25 20:36
标题: 回复 #63 NicTense 的帖子
如果不弄成复制到剪贴版的话,直接用带javascript和或vbscript的html就可以完成。我以前弄过一个GB2312汉字转区位码的html。
作者: NicTense    时间: 2010-3-26 11:46
昨天下载了powerbasic了,研究了半个小时,才写了个hello,你好
函数都忘光了,又没资料,NND,那英文天书得慢慢看了

过阵子有空再用这个来写好了,应该也就10K左右
不过貌似没有传说中的比vc还小那么厉害,hello,你好,编译出来也要6K,cnad的peset才5k
作者: netwinxp    时间: 2010-3-26 17:31
标题: 回复 #71 NicTense 的帖子
有,那就是masm32,不过NT内核以4K页面为内存分配单位(DOS是16字节),小于4K的也一样占4K,所以5K和8K对内存的占用几乎没有区别:)
  1. ;console模式的hello
  2. .386
  3. .model flat,stdcall
  4. option casemap:none
  5. include \masm32\include\windows.inc
  6. include \masm32\include\masm32.inc
  7. include \masm32\include\user32.inc
  8. include \masm32\include\kernel32.inc
  9. includelib \masm32\lib\masm32.lib
  10. includelib \masm32\lib\user32.lib
  11. includelib \masm32\lib\kernel32.lib
  12. .data
  13.     szMsg db "您好!",13,10,0
  14. .code
  15. start:
  16.     invoke StdOut,ADDR szMsg
  17.     invoke ExitProcess,0
  18. end start
复制代码
  1. ;对话框的hello
  2. .386
  3. .model flat,stdcall
  4. option casemap:none
  5. include \masm32\include\windows.inc
  6. include \masm32\include\kernel32.inc
  7. include \masm32\include\user32.inc
  8. includelib \masm32\lib\kernel32.lib
  9. includelib \masm32\lib\user32.lib
  10. .data
  11.     szCaption db "Hello World",0
  12.     szText    db "您好!",0
  13. .code
  14. start:
  15.     invoke MessageBox,NULL,ADDR szText,ADDR szCaption,MB_OK
  16.     invoke ExitProcess,0
  17. end start
复制代码
两个例子编译后都是2.5KB,可以运行于win95~2008R2_64(包括win7)的任何一个windows或PE,而且只需要KRNEL32.DLL和USER32.DLL支持(CMDPE不行)。

***附文件信息资源文件模块,酱紫就不会像大多数masm32例程一样“没名没姓”的——
  1. #include "\masm32\include\resource.h"
  2. //1000 ICON "Main.ico"
  3. 1 VERSIONINFO
  4. FILEVERSION 1,0,0,0
  5. // PRODUCTVERSION 1,0,0,0
  6. FILEFLAGSMASK 63
  7. FILEFLAGS 0
  8. FILEOS 4
  9. FILETYPE 1
  10. FILESUBTYPE 0
  11. BEGIN
  12.     BLOCK "StringFileInfo"
  13.     BEGIN
  14.         BLOCK "080404B0"
  15.         BEGIN
  16.             VALUE "Comments","Free Ware"
  17.             VALUE "CompanyName","个人"
  18.             VALUE "FileDescription","HELLO例程"
  19.             VALUE "FileVersion","1.0.0.0"
  20.             VALUE "InternalName","HELLOALL.EXE"
  21.             VALUE "LegalCopyright","netwinxp版权所有"
  22. //          VALUE "LegalTrademarks",""
  23.             VALUE "OriginalFilename","HELLOCMD.EXE"
  24. //          VALUE "PrivateBuild","Beta版"
  25.             VALUE "ProductName","软件学习例程"
  26.             VALUE "ProductVersion","1.0.0.0"
  27. //          VALUE "SpecialBuild",""
  28.         END
  29.     END
  30.     BLOCK "VarFileInfo"
  31.     BEGIN
  32.         VALUE "Translation",0x804,0x4B0
  33.     END
  34. END
  35. //Comments=备注
  36. //CompanyName=公司
  37. //FileDescription=描述
  38. //FileVersion=文件版本
  39. //InternalName=内部名称
  40. //LegalCopyright=版权
  41. //LegalTrademarks=注册商标
  42. //OriginalFilename=源文件名
  43. //PrivateBuild=内部版本说明
  44. //ProductName=产品名称
  45. //ProductVersion=产品版本
  46. //SpecialBuild=特殊说明
  47. //Translation=语言
复制代码

[ 本帖最后由 netwinxp 于 2010-3-26 21:10 编辑 ]

hello.rar

818 Bytes, 下载次数: 30, 下载积分: 无忧币 -2

编译好的文件

hello_info.rar

950 Bytes, 下载次数: 25, 下载积分: 无忧币 -2

加上文件信息要多1K...


作者: NicTense    时间: 2010-3-26 21:18
没用过masm,怎么语法这么像basic的,很有亲切感啊

c的亲切感只在10年前维持了1、2个月就消失了
作者: hlstudio    时间: 2010-3-26 22:03
牛人辈出,不顶不行啊
作者: netwinxp    时间: 2010-3-26 22:23
标题: 回复 #73 NicTense 的帖子
masm32和VC++差不多,大量调用windows函数,所以所有语言看起来都很像,但自己处理的部分就比较难了,
MOV 寄存器,内存指针
RCL 寄存器
PUSHAD
之类的就会很多,长得就和MASM(DOS)差不多了。
汇编的好处就是效率高(源代码很可能比目标代码还大),而且权限灵活,很多小个头的.sys就是汇编编的。
下面这个罗云彬masm32教学的ping例程和basic差别就比较明显了:)编译后(即使加上文件信息)也比系统自带的ping小多了:)

[ 本帖最后由 netwinxp 于 2010-3-26 23:07 编辑 ]

ping.rar

6.12 KB, 下载次数: 23, 下载积分: 无忧币 -2

ping


作者: NicTense    时间: 2010-3-27 11:50
原帖由 netwinxp 于 2010-3-26 22:23 发表
masm32和VC++差不多,大量调用windows函数,所以所有语言看起来都很像,但自己处理的部分就比较难了,
MOV 寄存器,内存指针
RCL 寄存器
PUSHAD
之类的就会很多,长得就和MASM(DOS)差不多了。
汇编的好处就 ...


找不到powerbasic的中文函数库或者教程,只能啃天书了,惨不忍睹

什么情况下用汇编能感觉到明显的优势的,如果有用我就去找个入门教程来看看,汇编反正也只会用来处理一些比较简单的东西

复杂的程序用汇编会写死人的

powerbasic可以插入汇编,只是汇编要记那些寄存器,远不如变量用得方便
作者: zhaohj    时间: 2010-3-27 12:14
呵呵,你慢慢啃吧,当做是学一门语言。实际上,我们写东西,真正需要它时,学习语言才会深刻领会。虽然刚开始编程并不理想,比如代码优化什么的,但学会了以后慢慢会融会贯通!
masm32和VC++,大量调用windows函数,掌握和理解这些现成的函数,也就学会了这些语言。但也好像并不容易的。
我的工作性质与电脑基本无关,时间一长,什么都忘了,就看你们的了。
作者: haiou327    时间: 2010-3-27 22:24
masm32编出来的东西就是小!
用KOL编了个Hello world还要20多K,压缩还得10多K   到极限了!

[ 本帖最后由 haiou327 于 2010-3-27 23:38 编辑 ]

hello.rar

13.01 KB, 下载次数: 28, 下载积分: 无忧币 -2


作者: NicTense    时间: 2010-3-28 01:48
原帖由 haiou327 于 2010-3-27 22:24 发表
masm32编出来的东西就是小!
用KOL编了个Hello world还要20多K,压缩还得10多K   到极限了!


谁让你用delphi6了,据说用2-5只有10-13k左右

这帖变成hello world大全了,我也上传一个

hello.rar (2.74 KB, 下载次数: 29)
作者: haiou327    时间: 2010-3-28 12:17
标题: 回复 #79 NicTense 的帖子
不带图标6KB,这PB还编译出来的还算贼小啊!
作者: NicTense    时间: 2010-3-31 12:27
打算对SourceDisksFiles字段进行格式化

我发现基本上所有的pe的txtsetup.sif的这个字段都有点乱七八糟的

这里格式化一下也能减肥不少,而且看上去会齐整很多

有几个问题需要大家帮忙,确认一下

ADPTSF50.sys=1,,,,,,4_,4,1,0,,1,4

以上行为例

1、4_这个位置,数字代表第几张盘,pe下实际上是没有意义的,省去效果是否一样,当_在前面代表未压缩,统一为 _1 是否效果一样

2、红色字体的1,0,第一个是当升级系统时的复制选项,第二个是新安装系统时的复制选项,请问pe下会被认为是升级还是新安装系统,如果这个是固定的,那就意味着这2个只要指定一个就行了,另外一个是没有任何意义的

3、蓝色部分的,我的理解是,当前面那个被省略掉的文件名如果指定时,这个才起作用,4应该是代表目标目录,而1代表什么?


[ 本帖最后由 NicTense 于 2010-3-31 23:40 编辑 ]
作者: zhaohj    时间: 2010-3-31 22:10
看看老毛桃的解释吧:
http://bbs.wuyou.net/forum.php?m ... mp;page=1#pid459752
作者: NicTense    时间: 2010-3-31 23:18
原帖由 zhaohj 于 2010-3-31 22:10 发表
看看老毛桃的解释吧:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=33852&page=1#pid459752


刚看了,写得太简单了,貌似都是网上被转了无数次的东西,没能解答我的问题
作者: caomaoLBL    时间: 2010-3-31 23:31
原帖由 NicTense 于 2010-3-31 23:18 发表


刚看了,写得太简单了,貌似都是网上被转了无数次的东西,没能解答我的问题


看看这个,比较详细!!!!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=80395&extra=page%3D1%26amp%3Bfilter%3Ddigest
作者: NicTense    时间: 2010-3-31 23:39
原帖由 caomaoLBL 于 2010-3-31 23:31 发表


看看这个,比较详细!!!!
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=80395&extra=page%3D1%26amp%3Bfilter%3Ddigest


嗯,这个是目前最详细,也是网上被转载得最多的版本,但是依然回答不了我的问题,有没有人对这个比较内行,可以直接回答我的问题
作者: netwinxp    时间: 2010-4-1 10:23
一般分为三部分:补丁包部分、源位置和目标位置
1)第一个数字表示哪个补丁包(也就是sp?),建议使用1(表示原版)或100
2)第二部分数字表示源文件所在位置、有没有压缩等,大致分为——SourceDisksNames[.平台]、SourceDisksFiles[.平台]
<1>DISK:数字=磁盘描述(也就是那个TAG文件名)[,磁盘卷标[,未使用[,路径(如果没有则表示根目录)]]]
<2>FILE:盘号(也就是<1>所使用的数字)[,子目录][,大小]
3)最后两三个数字最关键,它表示目标位置 DefaultDestDir(如果缺省表示相对于%systemroot%)和DestinationDirs:drid[,subdir]
至于数字就很难说了,它可能表示好几部分呢。
BTW:拷贝操作则一般直接用缺省,否则一大堆","之间就要天上数值了。
***
建议驱动的DLL文件(通常放在system32)写成——
=1,,,,,,4_,2,0,0,,1,2
SYS文件(通常放在drivers)写成——
=1,,,,,,4_,4,1,,,1,4

[ 本帖最后由 netwinxp 于 2010-4-1 11:48 编辑 ]
作者: dvd008    时间: 2010-4-1 10:50
ram模式启动,都删除了也行

那两个是备用的,不需要,具体如下

[SourceDisksFiles] 区段中每行的语法:


filename_on_source=diskid,subdir,upgradecode,newinstallcode,spare,spare,newfilename
源文件名=磁盘号,子目录,升级代码,新建安装代码,备用,备用,新文件名

额外字段由逗号(,)隔开, 这是 Windows NT 指定的.

当从软盘上开始安装时就会用到 diskid 了. (或者是多张光盘?)

subdir 就是复制文件的目的文件夹. Subdir 代码是在 TXTSETUP.SIF 的 [WinntDirectories] 区段中进行定义的.

upgradecode 是个个位数, 用于决定是否要升级比较老版本的同名文件. 它可以决定是否要在文本安装模式下复制这个文件.

以下是用于决定文件复制的代码定义.

状态代码 – 复制操作
0 – 总是复制这个文件
1 - 只有当同名文件存在于安装目录中时, 才复制这个文件
2 - 只有当安装目录中没有同名文件时, 才复制这个文件
3 - 不要复制这个文件

newinstallcode 是个个位数, 当全新安装时就要用到这个. 它可以决定是否要在文本安装模式下复制这个文件. newinstallcode 为可选项; 如果没有包含这个代码, 则文件不会被复制 (代码 = 3).

newfilename 用于重命名要复制的文件
作者: NicTense    时间: 2010-4-1 10:57
原帖由 dvd008 于 2010-4-1 10:50 发表
ram模式启动,都删除了也行

那两个是备用的,不需要,具体如下

[SourceDisksFiles] 区段中每行的语法:


filename_on_source=diskid,subdir,upgradecode,newinstallcode,spare,spare,newfilename
源 ...


你数错位置了,你贴的这个每个介绍txtsetup.sif的都有

那个1,4是在newfilename 之后的,根据写法,可以确定是目标位置,最后一个数字的定义同第2个,那个1是开关还是什么就不清楚了,目前没看到1以外的写法

我现在不确定的几个问题是

1、启动pe时,到底是视为升级,还是新安装系统

2、最后的这2个数字,是只有newfilename被指定时才生效,还是无论指不指定都生效

[ 本帖最后由 NicTense 于 2010-4-1 10:59 编辑 ]
作者: NicTense    时间: 2010-4-1 11:09
原帖由 netwinxp 于 2010-4-1 10:23 发表
2)第部分数字表示源文件所在位置、有没有压缩等,建议用4_
3)最后两三个数字最关键,它表示目标位置(盘、路径、子路径),盘通常不用再指定,路径和子路径通常为1,2(system32)和1,4(system32\drivers),我猜测1表示windows目录


2) 用4_有什么特殊含义吗? 和 1_  有何区别,微软这个设置有点奇怪,如按软盘算,应该至少都是几百张了,可是光盘又只有一张,这个1,2,3,4不知道以什么为参考,看大小应该是zip盘,不过这里没看出1_和4_会有什么区别,难道有什么隐含的设定?


3)倒数第三个不是应该是改名项吗?另外,最后一个数字跟第2个数字的定义是一样的,这样,倒数第二个貌似不应该是目录,更像是一个开关之类的,一直没找到官方的资料
作者: dvd008    时间: 2010-4-1 11:12
pe下没用,[SourceDisksFiles] 区段可以删除

ADPTSF50.sys=1,,,,,,4_,4,1,0 就足够了

4.。。。。目的目录 drv
1 升级代码
0 全新安装代码

后面的没用,重命名只是安装版的个别文件用到

由于drv目录已经存在,整个这部分内容没用
作者: NicTense    时间: 2010-4-1 11:21
原帖由 dvd008 于 2010-4-1 11:12 发表
pe下没用,[SourceDisksFiles] 区段可以删除

ADPTSF50.sys=1,,,,,,4_,4,1,0 就足够了

4.。。。。目的目录 drv
1 升级代码
0 全新安装代码

后面的没用,重命名只是安装版的个别文件用到

由于drv目 ...


嗯,我也觉得后面的可以删了

那这里的1,0,其作用的是1还是0
作者: dvd008    时间: 2010-4-1 11:26
我是说整个那些都可以删除
SourceDisksFiles] 区段内容可以删除

非ram只需要保留几个文件


0,0 就全部无条件的复制替换,无论有没有

升级是 原来已经有系统,已经有这个文件存在的情况下,如何处理
安装包里面的文件
作者: netwinxp    时间: 2010-4-1 11:33
原帖由 NicTense 于 2010-4-1 11:09 发表


2) 用4_有什么特殊含义吗? 和 1_  有何区别,微软这个设置有点奇怪,如按软盘算,应该至少都是几百张了,可是光盘又只有一张,这个1,2,3,4不知道以什么为参考,看大小应该是zip盘,不过这里没看出1_和4 ...

4_=%bootname4%,"%boottagfile4%",,""
1_=%bootname1%,"%boottagfile1%",,""
二者仅对于软盘版的有区别,对于光盘版来说是一样的。
由于很多磁盘驱动是在DISK104,所以通常比较喜欢用4_。

[ 本帖最后由 netwinxp 于 2010-4-1 12:01 编辑 ]
作者: NicTense    时间: 2010-4-1 11:34
原帖由 dvd008 于 2010-4-1 11:26 发表
我是说整个那些都可以删除
SourceDisksFiles] 区段内容可以删除

非ram只需要保留几个文件


0,0 就全部无条件的复制替换,无论有没有

升级是 原来已经有系统,已经有这个文件存在的情况下,如何处理 ...


包括drivers目录下的那些也不用指定吗?我试一下,看看会不会出问题
作者: netwinxp    时间: 2010-4-1 11:40
标题: 回复 #94 NicTense 的帖子
SourceFiles哪来的Drivers? Drivers是目标位置的,也就是最后一个数字,2=system32(驱动所需要的DLL通常就要放这里),4=drivers

[ 本帖最后由 netwinxp 于 2010-4-1 11:42 编辑 ]
作者: dvd008    时间: 2010-4-1 11:43
已经弄过了

pe不用那些内容,
实际只用了 txtsetup内容的两头

非ram版可能system32有几个文件要留,具体需要那几个没测试,
我的保留是为了留个清单
作者: NicTense    时间: 2010-4-1 11:48
标题: 回复 #96 dvd008 的帖子
测试结果,你是对的,我一直以为drivers目录下的要保留相关的项

那如果这个可以删的话,txtsetup就简单多了

非ram据说要保留的是这几个
c_936.nls=100,,,,,,,2,0,0,,1,2
kdcom.dll=100,,,,,,,2,0,0,,1,2
ntdll.dll=100,,,,,,,2,0,0,,1,2
ntoskrnl.exe=100,,,,,,,2,0,0,,1,2
setupreg.hiv=100,,,,,,,2,0,0,,1,2
vgaoem.fon=100,,,,,,,2,0,0,,1,2

我没测试过,未证实

[ 本帖最后由 NicTense 于 2010-4-1 11:51 编辑 ]
作者: netwinxp    时间: 2010-4-1 11:50
标题: 回复 #97 NicTense 的帖子
删除的话,非RAM方式可能会出问题。还有COPY方式的数值不写的话就会用缺省。
作者: NicTense    时间: 2010-4-1 11:52
原帖由 netwinxp 于 2010-4-1 11:50 发表
删除的话,非RAM方式可能会出问题。还有COPY方式的数值不写的话就会用缺省。


缺省是 0,0 吗
作者: netwinxp    时间: 2010-4-1 11:55
源位置那边的COPY操作默认应该是0,0,所以也可以写成,,,最后面两个表示目标位置的数字最好要写。个人建议的
xxxx=1,,,,,,4_,2,0,0,,1,2(dll)
xxxx=1,,,,,,4_,4,1,,,1,4(sys)
并不是没道理的。
***第二数字用4_的原因是磁盘驱动大多数在DISK104,所以喜欢用4_,其实光盘版它和1_没有区别。

[ 本帖最后由 netwinxp 于 2010-4-1 12:03 编辑 ]




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3