无忧启动论坛

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

[分享] RUN 1206 更新 支持磁盘交换,文件检索,自动菜单,自动列表,全自动安装nt5x系统

    [复制链接]
2641#
 楼主| 发表于 2014-6-6 21:09:11 来自手机 | 只看该作者
chanel 发表于 2014-6-6 20:03
能支持f6img.gz和dpms.lzma就够了。



恩,这个是没问题的

点评

S大,新版DP_MassStorage打包方式改变了,有些ID会出错。 http://bbs.wuyou.com/forum.php?mod=redirect&goto=findpost&ptid=335272&pid=2938744&fromuid=378114 驱动官方论坛: http://forum.driverpacks.  详情 回复 发表于 2014-6-6 22:45
回复

使用道具 举报

2642#
发表于 2014-6-6 22:01:49 | 只看该作者
本帖最后由 goodtime 于 2014-6-6 22:11 编辑

command (ud)/boot/RUN --loadfont  --swap-all --fira:(ud)/boot/imgs/firadisk.img dpms:(ud)/boot/imgs/dpms.lzma sif iso=/boot/xp.iso 我的错误在那里呢, 安装时候总是找不到文件, 虚拟机环境

error.jpg (46.3 KB, 下载次数: 213)

error.jpg

message.jpg (97.83 KB, 下载次数: 217)

message.jpg

点评

不太确定 但貌似和#2613差不多 你可以参考下#2614的解决方法  详情 回复 发表于 2014-6-6 23:51
回复

使用道具 举报

2643#
发表于 2014-6-6 22:45:19 | 只看该作者
sratlf 发表于 2014-6-6 21:09
恩,这个是没问题的


S大,新版DP_MassStorage打包方式改变了,有些ID会出错。
http://bbs.wuyou.net/forum.php?m ... &fromuid=378114


驱动官方论坛:
http://forum.driverpacks.net/viewtopic.php?pid=57592#p57592


修改后的DPMS和驱动包:
http://yun.baidu.com/share/link? ... 2&uk=2098012847

点评

这段麻烦加点注释吧 基本没看懂。。。  详情 回复 发表于 2014-6-7 11:11
回复

使用道具 举报

2644#
 楼主| 发表于 2014-6-6 23:51:59 | 只看该作者
goodtime 发表于 2014-6-6 22:01
command (ud)/boot/RUN --loadfont  --swap-all --fira:(ud)/boot/imgs/firadisk.img dpms:(ud)/boot/imgs/ ...

不太确定  但貌似和#2613差不多  你可以参考下#2614的解决方法

点评

谢谢, 真的是2614同样的问题  详情 回复 发表于 2014-6-7 02:25
回复

使用道具 举报

2645#
发表于 2014-6-7 02:25:55 | 只看该作者
sratlf 发表于 2014-6-6 23:51
不太确定  但貌似和#2613差不多  你可以参考下#2614的解决方法

谢谢, 真的是2614同样的问题
回复

使用道具 举报

2646#
发表于 2014-6-7 09:37:24 来自手机 | 只看该作者
s大最近好勤奋
回复

使用道具 举报

2647#
 楼主| 发表于 2014-6-7 11:11:03 | 只看该作者
527104427 发表于 2014-6-6 22:45
S大,新版DP_MassStorage打包方式改变了,有些ID会出错。
http://bbs.wuyou.net/forum.php?mod=redire ...

这段麻烦加点注释吧  基本没看懂。。。
  1. :root_path
  2. if "%~1"=="" && exit
  3. setlocal
  4. set tmp=%~1
  5. set tmp_left=%tmp:~,-16%
  6. set /a tmp_len=%@retval%
  7. cat --locatei="%tmp:~-16%" /driverpack.ini | call :check_tmp=
  8. set /a left_skip=%tmp_skip%

  9. :check_[
  10. if "%left_skip%"=="0" && goto :exit_check
  11. set /a left_skip=%left_skip%-500
  12. if "%left_skip%"<="0" && set /a left_skip=0
  13. set /a left_len=%tmp_skip%-%left_skip%
  14. cat --skip=%left_skip% --length=%left_len% --locatei=[ /driverpack.ini | call :check_left
  15. if not exist [_skip && goto :check_[
  16. cat --skip=%[_skip% --number=1 --locatei=] /driverpack.ini > nul
  17. set /a ]_skip=%?%
  18. if "%]_skip%"=="0" && goto :exit_check
  19. set /a len=%]_skip%-%[_skip%-1
  20. set /a skip=%[_skip%+1
  21. echo -n > (md)0x28150+28
  22. cat --skip=%skip% --length=%len% /driverpack.ini > (md)0x28150+28
  23. cat --locate=\x2D --replace=\x2F (md)0x28150+28
  24. cat (md)0x28150+28 | set /u root=D/M/
  25. :exit_check
  26. endlocal && set root=%root%
  27. exit

  28. :check_left
  29. if "%~1"=="" && exit
  30. if "%~2"=="" && set /a [_skip=0x%~1 && exit
  31. shift 1
  32. goto :check_left

  33. :check_tmp
  34. if "%~1"=="" && set tmp_skip= && exit
  35. set /a tmp_skip=0x%~1
  36. if "%tmp_left%"=="" && exit
  37. set /a tmp_skip=%tmp_skip%-%tmp_len%
  38. cat --skip=%tmp_skip% --length=%tmp_len% /driverpack.ini | set tmp=
  39. if /i "%tmp%"=="%tmp_left%" && exit
  40. shift 1
  41. goto :check_tmp
复制代码

点评

我的思路是这样的,找到对应ID所在段的标志,也就是括号 [] 里面的内容。将 - 替换为/,前面再加上D/M,就是驱动的目录了。 ::%~1=PCI\VEN_1000&DEV_0054 call :root_path ,%~1, echo %root% exit :roo  详情 回复 发表于 2014-6-7 11:44
回复

使用道具 举报

2648#
发表于 2014-6-7 11:44:27 | 只看该作者
本帖最后由 527104427 于 2014-6-7 23:35 编辑
sratlf 发表于 2014-6-7 11:11
这段麻烦加点注释吧  基本没看懂。。。


我的思路是这样的,找到对应ID所在段的标志,也就是括号 [] 里面的内容。将 - 替换为/,前面再加上D/M,就是驱动的目录了。

回复

使用道具 举报

2649#
发表于 2014-6-7 14:23:36 | 只看该作者
本帖最后由 527104427 于 2014-6-7 16:21 编辑

这样似乎好一点,不知道S大有没有简便的办法



  1. ::%~1=pci\ven_8086&dev_3a22&cc_0106
  2. call :root_path ",%~1,"
  3. echo %root%
  4. exit

  5. :root_path
  6. if "%~1"=="" && exit
  7. setlocal
  8. set *
  9. set tmp=%~1

  10. :loop_tmp
  11. ::去掉后面的16个字符
  12. set tmp_left=%tmp:~,-16%
  13. set /a tmp_len=%@retval%
  14. ::搜索ID最后的16个字符,貌似最多只能搜16个,将找到后的位置赋值给tmp_skip
  15. cat --locatei="%tmp:~-16%" /driverpack.ini | call :check_tmp=
  16. ::假如搜不到,去掉第一个逗号继续搜
  17. if not exist tmp_skip && if "%tmp:~,1%"=="," && set tmp=%tmp:~1% && goto :loop_tmp
  18. ::再搜不到,去掉最后一个逗号继续搜
  19. if not exist tmp_skip && if "%tmp:~-1%"=="," && set tmp=%tmp:~,-1% && goto :loop_tmp
  20. set /a left_skip=%tmp_skip%

  21. :check_[
  22. ::下面就是搜索 [ ,往前搜500个字符。找不到再往前搜500个字符,依此循环至0位置
  23. if "%left_skip%"=="0" && goto :ext_check
  24. set /a left_skip=%left_skip%-500
  25. if "%left_skip%"<="0" && set /a left_skip=0
  26. set /a left_len=%tmp_skip%-%left_skip%
  27. cat --skip=%left_skip% --length=%left_len% --locatei=[ /driverpack.ini | call :check_left=
  28. if not exist [_skip && goto :check_[
  29. ::找到 [ 了,继续找 ],找到后提取 [] 里面的内容
  30. cat --skip=%[_skip% --number=1 --locatei=] /driverpack.ini > nul
  31. set /a ]_skip=%?%
  32. if "%]_skip%"=="0" && goto :ext_check
  33. set /a len=%]_skip%-%[_skip%-1
  34. set /a skip=%[_skip%+1
  35. echo -n > (md)0x28150+28
  36. cat --skip=%skip% --length=%len% /driverpack.ini > (md)0x28150+28
  37. ::将 - 替换为 / ,然后在前面加上 D/M/
  38. cat --locate=\x2D --replace=\x2F (md)0x28150+28
  39. cat (md)0x28150+28 | set /u root=D/M/
  40. :ext_check
  41. endlocal && set root=%root%
  42. exit

  43. :check_left
  44. ::假如搜到的结果有多个,那就取最靠近 [ 的那个
  45. if "%~1"=="" && exit
  46. if "%~2"=="" && set /a [_skip=0x%~1 && exit
  47. shift 1
  48. goto :check_left

  49. :check_tmp
  50. ::找到的结果应该不止一个,那就再截取前面的%tmp_len%个字符和%tmp_left%比较,假如相同,那就找到了ID的位置
  51. if "%~1"=="" && set tmp_skip= && exit
  52. set /a tmp_skip=0x%~1
  53. if "%tmp_left%"=="" && exit
  54. set /a tmp_skip=%tmp_skip%-%tmp_len%
  55. cat --skip=%tmp_skip% --length=%tmp_len% /driverpack.ini | set tmp_tmp=
  56. if /i "%tmp_tmp%"=="%tmp_left%" && exit
  57. shift 1
  58. goto :check_tmp
复制代码

点评

有一个问题 类似 PCI\VEN_1000&DEV_0054 这个id在 L L7 L8 三项里都有 怎么处理  详情 回复 发表于 2014-6-7 23:24
恩 大概明白了 就是查找id所在的[]里的内容 同时将可能存在的-替换为/  详情 回复 发表于 2014-6-7 22:15
回复

使用道具 举报

2650#
 楼主| 发表于 2014-6-7 22:15:49 | 只看该作者
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

恩  大概明白了  就是查找id所在的[]里的内容  同时将可能存在的-替换为/
回复

使用道具 举报

2651#
 楼主| 发表于 2014-6-7 23:24:56 | 只看该作者
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

有一个问题  类似 PCI\VEN_1000&DEV_0054 这个id在 L  L7  L8 三项里都有  怎么处理

点评

是这样的,先在前面加两个逗号, call :root_path ",PCI\VEN_1000&DEV_0054," 优先查找,就可以快速找到在 L 那里,找不到再去掉前面的逗号,都找不到,那就两个逗号都去掉  详情 回复 发表于 2014-6-7 23:34
回复

使用道具 举报

2652#
发表于 2014-6-7 23:34:03 | 只看该作者
sratlf 发表于 2014-6-7 23:24
有一个问题  类似 PCI\VEN_1000&DEV_0054 这个id在 L  L7  L8 三项里都有  怎么处理

是这样的,先在前面加两个逗号,

call :root_path    ",PCI\VEN_1000&DEV_0054,"


优先查找,就可以快速找到在 L 那里,找不到再去掉前面的逗号,都找不到,那就两个逗号都去掉

点评

不是这个意思 我是说 PCI\VEN_1000&DEV_0054 这个结果 我再 L L7 L8 三项里都找到了 是如果L项就完全符合的话就获取L项的路径 还是说L项完全符合依然继续尝试L7和L8的是否匹配  详情 回复 发表于 2014-6-7 23:42
回复

使用道具 举报

2653#
 楼主| 发表于 2014-6-7 23:42:07 | 只看该作者
527104427 发表于 2014-6-7 23:34
是这样的,先在前面加两个逗号,

call :root_path    ",PCI\VEN_1000&DEV_0054,"

不是这个意思  我是说  PCI\VEN_1000&DEV_0054  这个结果  我再  L  L7  L8 三项里都找到了

是如果L项就完全符合的话就获取L项的路径  还是说L项完全符合依然继续尝试L7和L8的是否匹配

点评

找到第一个完全匹配的不再找了  详情 回复 发表于 2014-6-7 23:52
回复

使用道具 举报

2654#
发表于 2014-6-7 23:52:20 | 只看该作者
sratlf 发表于 2014-6-7 23:42
不是这个意思  我是说  PCI\VEN_1000&DEV_0054  这个结果  我再  L  L7  L8 三项里都找到了

是如果L项 ...


找到第一个完全匹配的就不再找了

点评

看看这个怎么样 没实际测试过  详情 回复 发表于 2014-6-8 02:25
回复

使用道具 举报

2655#
 楼主| 发表于 2014-6-8 02:25:06 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 02:38 编辑
527104427 发表于 2014-6-7 23:52
找到第一个完全匹配的就不再找了


看看这个怎么样  没实际测试过

  1. set inipath=/boot/grub/driverpack.ini

  2. :root_path
  3. if "%~1"=="" && exit
  4. set tmp=
  5. set HWID=%~1
  6. cat --locatei="%HWID:~-16%" %inipath% | call :hwid_check %@retval%
  7. if "%tmp%"=="" && exit
  8. call :get_[ %tmp% 1024 || exit
  9. ::tmp值为最近[位置
  10. set /a tmp=%?% + 1 > nul
  11. cat --skip=%tmp% --locate="]" --number=1 %inipath% > nul || exit
  12. calc %?% - %tmp% > nul
  13. cat --skip=%tmp% --length=%@retval% %inipath% > (md)0x200+1
  14. cat --locate=\x2D --replace=\x2F (md)0x200+1 > nul
  15. cat (md)0x200+1 | set /u root=D/M/
  16. exit

  17. :hwid_check
  18. ::tmp值为匹配ID位置
  19. set tmp=
  20. if "%~2"=="" && exit
  21. calc 0x%~2 - %~1 + 16 > nul
  22. cat --skip=%@retval% --length=%~1 %inipath% | set tmp=
  23. call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
  24. set /a tmp=0x%~2 - %~1 + 16 > nul
  25. exit

  26. :get_[
  27. ::tmp值为检测段开始位置,每次检测1kb
  28. if "%tmp%"<="%~2" && set tmp=0 ! set /a tmp=%tmp% - %~2 > nul
  29. cat --skip=%tmp% --length=%~2 --locate="[" %inipath% > nul && exit
  30. if "%tmp%"<="0" && exit 1
  31. goto :get_[
复制代码

点评

修改了一下,用下面的ID都测试通过了 set inipath=/boot/grub/driverpack.ini ::call :root_path PCI\VEN_13C1&DEV_1000 ::call :root_path pci\ven_197b&dev_2368 ::call :root_path PCI\VEN_1000&DEV_0  详情 回复 发表于 2014-6-8 13:27
回复

使用道具 举报

2656#
发表于 2014-6-8 13:27:59 | 只看该作者
本帖最后由 527104427 于 2014-6-8 13:29 编辑
sratlf 发表于 2014-6-8 02:25
看看这个怎么样  没实际测试过


修改了一下,用下面的ID都测试通过了

set inipath=/boot/grub/driverpack.ini
::call :root_path  PCI\VEN_13C1&DEV_1000
::call :root_path  pci\ven_197b&dev_2368
::call :root_path  PCI\VEN_1000&DEV_0054
call :root_path  pci\ven_8086&dev_3a22&cc_0106
exit

:root_path
if "%~1"=="" && exit
set tmp=
set /u HWID=%~1
cat --locatei="%HWID:~-16%" %inipath% | call :hwid_check %@retval%
if "%tmp%"=="" && exit
call :get_[ %tmp% 1024 || exit
::tmp值为最近[位置
set /a tmp=%?% + 1 > nul
cat --skip=%tmp% --locate=] --number=1 %inipath% > nul || exit
calc %?% - %tmp% > nul
cat --skip=%tmp% --length=%@retval% %inipath% > (md)0x200+1
cat --locate=\x2D --replace=\x2F (md)0x200+1 > nul
cat (md)0x200+1 | set /u root=D/M/
exit

:hwid_check
::tmp值为匹配ID位置
set tmp=
if "%~2"=="" && exit
calc 0x%~2 - %~1 + 16 > nul
cat --skip=%@retval% --length=%~1 %inipath% | set /u tmp=
call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
::紧跟ID后面的必须是双引号或逗号,否则重新搜索
::比如ID为PCI\VEN_1000&DEV_0054,搜到的却是PCI\VEN_1000&DEV_0054&SUBSYS_1F041028
calc 0x%~2 + 16 > nul
cat --hex --skip=%@retval% --length=1 %inipath% | call :get_last=
call Fn.15 "22" "%tmp%" && call Fn.15 "2C" "%tmp%" && shift 2 && goto :hwid_check
set /a tmp=0x%~2 - %~1 + 16 > nul
exit

:get_last
set tmp=%~2
exit

:get_[
::tmp值为检测段开始位置,每次检测1kb,比较数值大小不能加双引号,否则出错
if %tmp%<=%~2 && set len=%tmp% && set tmp=0 ! set len=%~2 && set /a tmp=%tmp% - %~2 > nul
cat --skip=%tmp% --length=%len% --locate=[ %inipath% > nul && exit
if %tmp%<=0 && exit 1
goto :get_[

点评

用不着这么麻烦 下面这样就可以了 数值比较的话是可以用"" 以前的版本不行 后来忘记是哪一版修改了 可以比较了 而且还能防止数值为空报错  详情 回复 发表于 2014-6-8 14:11
回复

使用道具 举报

2657#
 楼主| 发表于 2014-6-8 14:11:05 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 14:22 编辑
527104427 发表于 2014-6-8 13:27
修改了一下,用下面的ID都测试通过了

set inipath=/boot/grub/driverpack.ini


用不着这么麻烦  下面这样就可以了  忘记了  数值比较的话是不能用""  做字符比较的时候可以

  1. :hwid_check
  2. ::tmp值为匹配ID位置
  3. set tmp=
  4. if "%~2"=="" && exit
  5. calc 0x%~2 + 16 > nul
  6. cat --skip=%@retval% --length=1 %inipath% | set tmp=
  7. ::不以,或"结尾则继续
  8. if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"<="0x22" || shift 2 && goto :hwid_check
  9. calc 0x%~2 - %~1 + 16 > nul
  10. cat --skip=%@retval% --length=%~1 %inipath% | set tmp=
  11. call Fn.15 "%HWID%" "%tmp%" && shift 2 && goto :hwid_check
  12. set /a tmp=0x%~2 - %~1 + 16 > nul
  13. exit

  14. :get_[
  15. ::tmp值为检测段开始位置,每次检测1kb
  16. if %tmp%<=%~2 && set tmp=0 ! set /a tmp=%tmp% - %~2 > nul
  17. cat --skip=%tmp% --length=%~2 --locate="[" %inipath% > nul && exit
  18. if %tmp%<=0 && exit 1
  19. goto :get_[
复制代码

捕获.PNG (11.74 KB, 下载次数: 237)

捕获.PNG

点评

if "%tmp%"=="," || 这句还是有问题的,假如tmp为" 不管三七二十一,直接报错退出了 用PCI\VEN_13C1&DEV_1000试试, 结果应是D/M/3,看截图,结果却是D/M/A 所以下面这段还是这样: :get_[  详情 回复 发表于 2014-6-8 14:35
回复

使用道具 举报

2658#
发表于 2014-6-8 14:35:49 | 只看该作者
sratlf 发表于 2014-6-8 14:11
用不着这么麻烦  下面这样就可以了  忘记了  数值比较的话是不能用""  做字符比较的时候可以

if "%tmp%"==","  ||

这句还是有问题的,假如tmp为"
不管三七二十一,直接报错退出了






用PCI\VEN_13C1&DEV_1000试试,
结果应是D/M/3,看截图,结果却是D/M/A
所以下面这段还是这样:

:get_[
::tmp值为检测段开始位置,每次检测1kb,比较数值大小不能加双引号,否则出错
if %tmp%<=%~2 && set len=%tmp% && set tmp=0 ! set len=%~2 && set /a tmp=%tmp% - %~2 > nul
cat --skip=%tmp% --length=%len% --locate="[" %inipath% > nul && exit
if %tmp%<=0 && exit 1
goto :get_[

点评

判断 " 用的是 if "%tmp%">="0x22" if "%tmp%"  详情 回复 发表于 2014-6-8 14:42
回复

使用道具 举报

2659#
 楼主| 发表于 2014-6-8 14:42:54 | 只看该作者
527104427 发表于 2014-6-8 14:35
if "%tmp%"==","  ||

这句还是有问题的,假如tmp为"

判断 " 用的是 if "%tmp%">="0x22" if "%tmp%"<="0x22"  你试下就知道了  比较加引号会转为比较ascii码

:get_[我在看下

点评

[attachimg]194729[/attachimg]  详情 回复 发表于 2014-6-8 14:45
回复

使用道具 举报

2660#
发表于 2014-6-8 14:45:26 | 只看该作者
sratlf 发表于 2014-6-8 14:42
判断 " 用的是 if "%tmp%">="0x22" if "%tmp%"

点评

是比较 不是等于。。。 见图 :get_[可以改为下面这样  详情 回复 发表于 2014-6-8 14:50
回复

使用道具 举报

2661#
 楼主| 发表于 2014-6-8 14:50:30 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 14:51 编辑


是比较  不是等于。。。 见图  :get_[可以改为下面这样  都差不多  不过我是尽量不设置太多变量名

  1. :get_[
  2. ::tmp值为检测段开始位置,每次检测1kb
  3. if %tmp%<=%~2 && set tmp=0 && calc %~1 > nul ! set /a tmp=%tmp% - %~2 > nul && calc %~2 > nul
  4. cat --skip=%tmp% --length=%@retval% --locate="[" %inipath% > nul && exit
  5. if %tmp%<=0 && exit 1
  6. goto :get_[
复制代码

捕获.PNG (7.25 KB, 下载次数: 256)

捕获.PNG

点评

这句,换下位置 if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"="0x22" if "%tmp%"  详情 回复 发表于 2014-6-8 14:53
回复

使用道具 举报

2662#
发表于 2014-6-8 14:53:41 | 只看该作者
sratlf 发表于 2014-6-8 14:50
是比较  不是等于。。。 见图  :get_[可以改为下面这样

这句,换下位置
if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"<="0x22" || shift 2 && goto :hwid_check

改成这样就好了
if "%tmp%">="0x22" if "%tmp%"<="0x22" || if "%tmp%"=="," || shift 2 && goto :hwid_check

点评

哪种情况会比较多 后面是"还是,  详情 回复 发表于 2014-6-8 14:57
回复

使用道具 举报

2663#
 楼主| 发表于 2014-6-8 14:57:39 | 只看该作者
527104427 发表于 2014-6-8 14:53
这句,换下位置
if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"="0x22" if "%tmp%"

哪种情况会比较多  后面是"还是,

点评

我觉得吧,不管找到,还是找到" 都百分百可以确定就是ID的位置了。不需要再往下找。 改下位置只是为了减少发生错误的概率  详情 回复 发表于 2014-6-8 15:02
回复

使用道具 举报

2664#
发表于 2014-6-8 15:02:14 | 只看该作者
sratlf 发表于 2014-6-8 14:57
哪种情况会比较多  后面是"还是,


我觉得吧,不管找到,还是找到"
都百分百可以确定就是ID的位置了。不需要再往下找。

改下命令的位置只是为了减少发生错误的概率

点评

那没什么区别吧 执行第二段命令的前提都是前一段命令为假。。。 不管是不同还是命令错误返回值都是假。。。 顺手把HWID变量也去掉了 一个tmp变量搞定 还有dpms.bat里146行开始的 可以改成  详情 回复 发表于 2014-6-8 15:11
回复

使用道具 举报

2665#
 楼主| 发表于 2014-6-8 15:11:45 | 只看该作者
本帖最后由 sratlf 于 2014-6-8 16:44 编辑
527104427 发表于 2014-6-8 15:02
我觉得吧,不管找到,还是找到"
都百分百可以确定就是ID的位置了。不需要再往下找。


那没什么区别吧  执行第二段命令的前提都是前一段命令为假。。。  不管是不同还是命令错误返回值都是假。。。

顺手把HWID变量也去掉了  一个tmp变量搞定

  1. set inipath=/boot/grub/srs/driverpack.ini

  2. :root_path
  3. if "%~1"=="" && exit
  4. set tmp=%~1
  5. cat --locatei="%tmp:~-16%" %inipath% | call :hwid_check %~1 %@retval%
  6. if "%tmp%"=="" && exit
  7. if %tmp%<=1024 && calc %tmp% > nul ! calc 1024 > nul
  8. call :get_[ %tmp% %@retval% || exit
  9. ::tmp值为最近[位置
  10. set /a tmp=%?% + 1 > nul
  11. cat --skip=%tmp% --locate="]" --number=1 %inipath% > nul || exit
  12. calc %?% - %tmp% > nul
  13. cat --skip=%tmp% --length=%@retval% %inipath% > (md)0x200+1
  14. cat --locate=\x2D --replace=\x2F (md)0x200+1 > nul
  15. cat (md)0x200+1 | set /u root=D/M/
  16. set tmp=
  17. exit

  18. :hwid_check
  19. ::tmp值为匹配ID位置
  20. set tmp=
  21. if "%~3"=="" && exit
  22. calc 0x%~3 + 16 > nul
  23. cat --skip=%@retval% --length=1 %inipath% | set tmp=
  24. ::不以,或"结尾则继续
  25. if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"<="0x22" || shift 3 && goto :hwid_check
  26. calc 0x%~3 - %~2 + 16 > nul
  27. cat --skip=%@retval% --length=%~2 %inipath% | set tmp=
  28. call Fn.15 "%~1" "%tmp%" && shift 3 && goto :hwid_check
  29. set /a tmp=0x%~3 - %~2 + 16 > nul
  30. exit

  31. :get_[
  32. ::tmp值为检测段开始位置,每次检测1kb
  33. if %tmp%<=%~2 && set tmp=0 ! set /a tmp=%tmp% - %~2 > nul
  34. cat --skip=%tmp% --length=%~2 --locate="[" %inipath% > nul && exit
  35. if %tmp%<=0 && exit 1
  36. goto :get_[
复制代码


还有dpms.bat里146行开始的
  1. ::读取SCSI为变量hardids
  2. set /u locate=%~1
  3. set locate=%locate:~-16%
  4. cat --locatei=%locate% --number=1 (8)/oem | set locate=
  5. if not exist locate && goto :chkpci-1
  6. set /a locate=0x%locate%
  7. cat --length=%locate% --locate=[ (8)/oem > nul
  8. calc %@retval% && set /a first=%?% ! goto :chkpci-1
  9. cat --skip=%first% --locate=] --number=1 (8)/oem > nul
  10. set /a len=%?%-%first%
  11. cat --skip=%first% --length=%len% (8)/oem | set hardids=
  12. set hardids=%hardids:~18%
复制代码


可以改成

  1. ::读取SCSI为变量hardids
  2. set tmp=%~1
  3. set tmp= && cat --locatei=%tmp:~-16% --number=1 (8)/oem > nul || goto :chkpci-1
  4. cat --length=%?% --locate=[ (8)/oem > nul || goto :chkpci-1
  5. set /a first=%?% + 1 > nul
  6. cat --skip=%first% --locate=] --number=1 (8)/oem > nul
  7. calc %?% - %first% > nul
  8. cat --skip=%first% --length=%@retval% (8)/oem | set hardids=
  9. set hardids=%hardids:~17%
复制代码

点评

S大辛苦了,非常完美  详情 回复 发表于 2014-6-8 16:14
回复

使用道具 举报

2666#
发表于 2014-6-8 16:14:23 | 只看该作者
sratlf 发表于 2014-6-8 15:11
那没什么区别吧  执行第二段命令的前提都是前一段命令为假。。。  不管是不同还是命令错误返回值都是假。 ...



S大辛苦了,非常完美

点评

又改了一点 8行 9行 36行 37行有差异 尽可能简化命令了  详情 回复 发表于 2014-6-8 16:45
回复

使用道具 举报

2667#
 楼主| 发表于 2014-6-8 16:45:53 | 只看该作者
527104427 发表于 2014-6-8 16:14
S大辛苦了,非常完美

又改了一点  8行 9行 36行 37行有差异  尽可能简化命令了
回复

使用道具 举报

2668#
发表于 2014-6-9 11:30:48 | 只看该作者
s大,请教个问题:
grldr本身是支持光盘启动的,但是run的返回菜单中使用了find …… --ignore-cd这样的命令,那么光盘上的menu.lst必然是找不到的。
我用run制作自动菜单,在ud中没问题,但是iso的话,自动菜单无法返回主菜单,请问怎么解决?

点评

run里的find没用过 --ignore-cd 。。。 我自己就是做的iso做usb-cdrom启动 返回主菜单也没问题啊。。。 你的具体是什么情况 再不行就给我小体积的测试包  详情 回复 发表于 2014-6-9 11:45
回复

使用道具 举报

2669#
 楼主| 发表于 2014-6-9 11:45:17 | 只看该作者
fukystone 发表于 2014-6-9 11:30
s大,请教个问题:
grldr本身是支持光盘启动的,但是run的返回菜单中使用了find …… --ignore-cd这样的命 ...

run里的find没用过 --ignore-cd 。。。  我自己就是做的iso做usb-cdrom启动  返回主菜单也没问题啊。。。

你的具体是什么情况  再不行就给我小体积的测试包

点评

请看附件。做成iso后,run返回直接进命令符,以前的老版run(13年)可以退回到原主菜单的  详情 回复 发表于 2014-6-9 12:19
哦?那么是grldr自带的菜单?看着也挺像的…… 这真奇怪了,明明就是光盘启动的  详情 回复 发表于 2014-6-9 12:01
回复

使用道具 举报

2670#
发表于 2014-6-9 12:01:51 | 只看该作者
sratlf 发表于 2014-6-9 11:45
run里的find没用过 --ignore-cd 。。。  我自己就是做的iso做usb-cdrom启动  返回主菜单也没问题啊。。。 ...

哦?那么是grldr自带的菜单?看着也挺像的……
这真奇怪了,明明就是光盘启动的

QQ截图20140609115745.jpg (724.96 KB, 下载次数: 190)

QQ截图20140609115745.jpg

QQ截图20140609120001.jpg (833.19 KB, 下载次数: 207)

QQ截图20140609120001.jpg

点评

这个是grldr内置菜单。。。。无论什么启动grldr内置菜单都是一样的 除非是自己修改过了  详情 回复 发表于 2014-6-9 12:05
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 20:41

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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