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

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

   火... [复制链接]
 楼主| 发表于 2014-6-7 22:15:49 | 显示全部楼层
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

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

使用道具 举报

 楼主| 发表于 2014-6-7 23:24:56 | 显示全部楼层
527104427 发表于 2014-6-7 14:23
这样似乎好一点,不知道S大有没有简便的办法

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

使用道具 举报

 楼主| 发表于 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-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_[
复制代码
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

 楼主| 发表于 2014-6-8 14:42:54 | 显示全部楼层
527104427 发表于 2014-6-8 14:35
if "%tmp%"==","  ||

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

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

:get_[我在看下
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

 楼主| 发表于 2014-6-8 14:57:39 | 显示全部楼层
527104427 发表于 2014-6-8 14:53
这句,换下位置
if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"="0x22" if "%tmp%"

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

使用道具 举报

 楼主| 发表于 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%
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-6-8 16:45:53 | 显示全部楼层
527104427 发表于 2014-6-8 16:14
S大辛苦了,非常完美

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

使用道具 举报

发表于 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
回复

使用道具 举报

 楼主| 发表于 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
回复

使用道具 举报

发表于 2014-6-9 12:01:51 | 显示全部楼层
sratlf 发表于 2014-6-9 11:45
run里的find没用过 --ignore-cd 。。。  我自己就是做的iso做usb-cdrom启动  返回主菜单也没问题啊。。。 ...

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

点评

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

使用道具 举报

 楼主| 发表于 2014-6-9 12:05:39 | 显示全部楼层
fukystone 发表于 2014-6-9 12:01
哦?那么是grldr自带的菜单?看着也挺像的……
这真奇怪了,明明就是光盘启动的

这个是grldr内置菜单。。。。无论什么启动grldr内置菜单都是一样的  除非是自己修改过了
回复

使用道具 举报

发表于 2014-6-9 12:08:44 | 显示全部楼层
出现上图后会自动退回到命令符,但是在命令符敲:configfile /menu.lst 就可以回到我的主菜单。
看上图,应该是执行run的返回命令时,跳转执行了上图的那个菜单,最后到commandline回到了命令符,也就是菜单的第5行和第6行没有找到光盘根目录下的menu.lst

点评

我其实很想问 如果grldr内置菜单是默认的 menu.lst还放置在根目录 iso启动的话是启动的哪个菜单文件 怎么进去的run。。。 0x71蓝屏很少见到 不过理论上来说 可以成功启动pe的iso到滚动条阶段grub4dos的事情就  详情 回复 发表于 2014-6-9 13:34
回复

使用道具 举报

发表于 2014-6-9 12:19:09 | 显示全部楼层
sratlf 发表于 2014-6-9 11:45
run里的find没用过 --ignore-cd 。。。  我自己就是做的iso做usb-cdrom启动  返回主菜单也没问题啊。。。 ...

请看附件。做成iso后,run返回直接进命令符,以前的老版run(13年)可以退回到原主菜单的

bootcd.7z

2.42 MB, 下载次数: 19, 下载积分: 无忧币 -2

回复

使用道具 举报

发表于 2014-6-9 12:30:27 | 显示全部楼层
527104427 发表于 2014-6-9 12:22
将你的菜单放到
        /boot/grub/menu.lst

果然如此。多谢5大。
话说这设定真有点蛋疼,完全无法理解啊。
另外5大看下srsf6呗,新版dpms不能用啊
回复

使用道具 举报

发表于 2014-6-9 12:44:21 | 显示全部楼层
527104427 发表于 2014-6-9 12:41
那个,S大回复过了,0.46a的问题,暂时用0.45c吧

不是的,我后来又测试了一下,用045c提示找不到vmscsi.sys文件……请在你的帖子里看一下
回复

使用道具 举报

发表于 2014-6-9 13:00:44 | 显示全部楼层
另外请s大看下修改的命令,新版有这样一个问题:
使用run --fira dpms iso=(cd)/mype/tangope.iso这样的命令,可以显示srs加载成功,但是pe在启动到桌面的时候死掉,explorer出不来。dpms换srs也一样。
QQ截图20140609125903.jpg
QQ截图20140609125925.jpg
QQ截图20140609130000.jpg
回复

使用道具 举报

 楼主| 发表于 2014-6-9 13:34:18 | 显示全部楼层
fukystone 发表于 2014-6-9 12:08
出现上图后会自动退回到命令符,但是在命令符敲:configfile /menu.lst 就可以回到我的主菜单。
看上图, ...

我其实很想问  如果grldr内置菜单是默认的  menu.lst还放置在根目录  iso启动的话是启动的哪个菜单文件  怎么进去的run。。。
0x71蓝屏很少见到  不过理论上来说  可以成功启动pe的iso到滚动条阶段grub4dos的事情就已经全部结束了  以前启动这个iso能成功吗

点评

iso启动的就是根目录下的menu.lst,run是从menu.lst进去的…… 不过这个把menu.lst放到boot/grub就ok了,算是问题解决。 同样的菜单文件(我上传那个),同样的iso,用srsf6选f6img是可以进pe的,并且识别vmscsi。  详情 回复 发表于 2014-6-9 13:44
回复

使用道具 举报

发表于 2014-6-9 13:44:56 | 显示全部楼层
sratlf 发表于 2014-6-9 13:34
我其实很想问  如果grldr内置菜单是默认的  menu.lst还放置在根目录  iso启动的话是启动的哪个菜单文件   ...

iso启动的就是根目录下的menu.lst,run是从menu.lst进去的……
不过这个把menu.lst放到boot/grub就ok了,算是问题解决。
同样的菜单文件(我上传那个),同样的iso,用srsf6选f6img是可以进pe的,并且识别vmscsi。
老版run(13年),同样的iso,用老版dpms,也是可以正常进入pe识别vmscsi的。
所以这个应该是新版修改的问题。
至于新版dpms的代码,用你的会蓝屏(有时候也不蓝,会死在进入桌面后,出不来explorer),用5大那个会提示找不到vmscsi.sys文件……

点评

根目录那个应该是bug 不应该执行根目录下menu.lst的 这个我会再测试 0606的RUN是旧版dpms 0608的是修改后的 你先试试这两个有什么区别  详情 回复 发表于 2014-6-9 13:48
回复

使用道具 举报

 楼主| 发表于 2014-6-9 13:48:32 | 显示全部楼层
fukystone 发表于 2014-6-9 13:44
iso启动的就是根目录下的menu.lst,run是从menu.lst进去的……
不过这个把menu.lst放到boot/grub就ok了 ...

根目录那个应该是bug  不应该执行根目录下menu.lst的  这个我会再测试

0606的RUN是旧版dpms  0608的是修改后的  你先试试这两个有什么区别
回复

使用道具 举报

发表于 2014-6-9 14:35:04 | 显示全部楼层
sratlf...辛苦了,再接再厉
回复

使用道具 举报

 楼主| 发表于 2014-6-9 17:39:28 | 显示全部楼层
527104427 发表于 2014-6-9 17:04
问题解决,

将这句:

前后都可以加上换行的判断

::tmp值为最近[位置
set /a tmp=%?% + 2 > nul
cat --skip=%tmp% --locate="]\xD" --number=1 %inipath% > nul || exit

:get_[
...
cat --skip=%tmp% --length=%~2 --locate="\xA[" %inipath% > nul && exit
回复

使用道具 举报

 楼主| 发表于 2014-6-9 21:07:21 | 显示全部楼层
527104427 发表于 2014-6-9 21:03
S大看一下,这段改成这样应该更严谨一点

怎么还有行首;注释情况。。。  再看看还有什么特殊的没。。。
回复

使用道具 举报

 楼主| 发表于 2014-6-9 21:47:50 | 显示全部楼层
527104427 发表于 2014-6-9 21:19
还真有,行首为 exc 的也不能要

为exc的为什么不能用。。。
回复

使用道具 举报

 楼主| 发表于 2014-6-9 22:06:23 | 显示全部楼层
527104427 发表于 2014-6-9 21:51
这有一段奇怪的代码,不知道用来干嘛的

貌似是和什么配置有关的  找到一个相近的解释  http://forum.driverpacks.net/viewtopic.php?id=3161
回复

使用道具 举报

 楼主| 发表于 2014-6-9 22:28:16 | 显示全部楼层
527104427 发表于 2014-6-9 22:19
估计是 DPs.exe 的配置,应该跟搜索ID的位置无关

应该是吧  那综合起来就是行首不为 ;   且以 ms_ 开头的是吧  还有其他要求吗
回复

使用道具 举报

 楼主| 发表于 2014-6-9 22:59:28 | 显示全部楼层
527104427 发表于 2014-6-9 22:40
满足 以 ms_ 开头就行了(行首不为;也包括在内),S大看 #2690 代码

恩  看到了  是不是搜索的多了点。。。
回复

使用道具 举报

 楼主| 发表于 2014-6-10 00:50:37 | 显示全部楼层
527104427 发表于 2014-6-9 23:18
是挺多的,搜少了不好计算,干脆就全搜了吧

貌似被我改复杂了

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

  17. ::tmp值为匹配ID位置
  18. :hwid_check
  19. set tmp=
  20. if "%~3"=="" && exit
  21. ::行首为ms_
  22. set tmp=0x%~3
  23. if %tmp%<=512 && calc %tmp% > nul ! calc 512 > nul
  24. call :get_char %tmp% %@retval% "xA" || set ?=-1
  25. calc %?% + 1 > nul
  26. cat --skip=%@retval% --length=3 %inipath% | set tmp=
  27. call Fn.15 "%tmp%" "ms_" && shift 3 && goto :hwid_check
  28. ::不以,或"结尾
  29. calc 0x%~3 + 16 > nul
  30. cat --skip=%@retval% --length=1 %inipath% | set tmp=
  31. if "%tmp%"=="," || if "%tmp%">="0x22" if "%tmp%"<="0x22" || shift 3 && goto :hwid_check
  32. calc 0x%~3 - %~2 + 16 > nul
  33. cat --skip=%@retval% --length=%~2 %inipath% | set tmp=
  34. call Fn.15 "%~1" "%tmp%" && shift 3 && goto :hwid_check
  35. set /a tmp=0x%~3 - %~2 + 16 > nul
  36. exit

  37. :get_char
  38. ::%tmp%起始位置 %~2每段范围 %~3要查找的字符
  39. if %tmp%<=%~2 && set tmp=0 && calc %~1 > nul ! set /a tmp=%tmp% - %~2 > nul && calc %~2 > nul
  40. cat --skip=%tmp% --length=%@retval% --locate="\%~3" %inipath% > nul && exit
  41. if %tmp%<=0 && set tmp= && exit 1
  42. goto :get_char
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-22 11:38

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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