无忧启动论坛

标题: 能否对find /file 的结果进行判断 [打印本页]

作者: yjqd    时间: 2019-6-10 16:34
标题: 能否对find /file 的结果进行判断
比如:
find /winpe.wim
(hd0,0)
(hd1,0)

我想根据结果判断如果有(hd1,0),就设(hd1,0)为变量p,比如:
kernel /wimboot
initrd ……@boot.wim=%p%/winpe.wim
作者: chishingchan    时间: 2019-6-10 17:09
grub4dos 命令参数我一点都不懂,遇到问题没人解答的情况下我也有好奇心。

看到说明文档里有此一行引起我的想像
find --set-root /file.ext || echo file not found.
弄两个菜单项分别是对于(hd0及hd1)进行处理,两菜单添加上以下这句:(自己改正确)
find --set-root /winpe.wim || set p=???
|| 前面的语句如果失败就会执行后面的语句。

自己变通一下试试这个方法。

作者: 527104427    时间: 2019-6-10 17:15
本帖最后由 527104427 于 2019-6-10 17:40 编辑

set p=
find /winpe.wim | call  :a

:a
if "%1"=="" exit
if /i "%1"=="(hd1,0)" set p=%1
shift 1
goto %0
作者: yjqd    时间: 2019-6-10 17:38
527104427 发表于 2019-6-10 17:15
set p=
find /winpe.wim | call  :a

问一下,能否用于菜单中
作者: 527104427    时间: 2019-6-10 17:41
yjqd 发表于 2019-6-10 17:38
问一下,能否用于菜单中

貌似不行,也许是我不懂吧。
作者: chishingchan    时间: 2019-6-10 18:26
好尴尬!
作者: yjqd    时间: 2019-6-10 18:36
chishingchan 发表于 2019-6-10 17:09
grub4dos 命令参数我一点都不懂,遇到问题没人解答的情况下我也有好奇心。

看到说明文档里有此一行引起 ...

谢谢回复
你的菜单可行,若能更精简一些就好
作者: 527104427    时间: 2019-6-10 18:53
yjqd 发表于 2019-6-10 18:36
谢谢回复
你的菜单可行,若能更精简一些就好

菜单中这样试试:

set p= &; cat --length=0 (hd1,0)/winpe.wim && set p=(hd1,0)



作者: 527104427    时间: 2019-6-10 19:11
chishingchan 发表于 2019-6-10 18:26
好尴尬!

哈哈哈哈
作者: yjqd    时间: 2019-6-10 19:18
527104427 发表于 2019-6-10 18:53
菜单中这样试试:

set p= &; cat --length=0 (hd1,0)/winpe.wim && set p=(hd1,0)

谢谢回复

这个菜单我知道它的作用,不用测试,能行的, (hd1,0)能为变量就更好了

我自己写的菜单太复杂了:
title 启动Windows8pe用wimboot
set l=(md)0x60500+0x100
find /winpe.wim > %l%
cat --locatei=hd1 %l% > nul && cat --skip=10 %l% | set p=
kernel /grub4dos/wimboot index=1
initrd ...@boot.wim=%p%/winpe.wim
boot
作者: 527104427    时间: 2019-6-10 19:39
yjqd 发表于 2019-6-10 19:18
谢谢回复

这个菜单我知道它的作用,不用测试,能行的, (hd1,0)能为变量就更好了

这不是挺强的吗,没办法再简化了吧?
作者: yjqd    时间: 2019-6-10 19:57
527104427 发表于 2019-6-10 19:39
这不是挺强的吗,没办法再简化了吧?

好像存在一个问题,cat的--skip是为了跳过(hd0,0),如果(hd0,0)上不存在winpe.wim,cat就不能用--skip
作者: 527104427    时间: 2019-6-10 20:54
本帖最后由 527104427 于 2019-6-11 09:17 编辑
yjqd 发表于 2019-6-10 19:57
好像存在一个问题,cat的--skip是为了跳过(hd0,0),如果(hd0,0)上不存在winpe.wim,cat就不能用--skip


title 启动Windows8pe用wimboot
set l=(md)0x60500+0x100 &; find /winpe.wim > %l% &; cat --locatei=(hd1 --number=1 %l% | set star_num= &; cat --locatei=) --number=1 --skip=0x%star_num% %l% | set end_num= &; set /a len=0x%end_num%-0x%star_num%+1 > nul &; cat --skip=0x%star_num% --length=%len% %l% | set p=


作者: yjqd    时间: 2019-6-11 09:10
527104427 发表于 2019-6-10 20:54
title 启动Windows8pe用wimboot
set l=(md)0x60500+0x100 &; find /winpe.wim > %l% &; cat --locatei ...

我把你的代码放在菜单里,结果报错:filename must ……
echo %p%,显示结果不是分区号

我把 &; 去掉,并以它的位置换行写入菜单,结果仍然如上

你的代码该怎样加入菜单
作者: 527104427    时间: 2019-6-11 09:15
本帖最后由 527104427 于 2019-6-11 09:19 编辑
yjqd 发表于 2019-6-11 09:10
我把你的代码放在菜单里,结果报错:filename must ……
echo %p%,显示结果不是分区号


什么版本的g4d?

刚才有一处%star_num%应该是0x%star_num%,改了一下
作者: yjqd    时间: 2019-6-11 10:00
527104427 发表于 2019-6-11 09:15
什么版本的g4d?

刚才有一处%star_num%应该是0x%star_num%,改了一下

谢谢,成功了,果然是前面的%star_num%少加了0x

你的代码实现了我的目的:
U盘启动时(U盘只有1个分区),只要电脑硬盘哪个分区根目录有winpe.wim,就启动硬盘分区根目录的winpe.wim,而不启动U盘分区根目录的winpe.wim
U盘没有winpe.wim,硬盘分区根目录有winpe.wim,就启动硬盘分区根目录的winpe.wim
U盘有winpe.wim,如果硬盘所有分区根目录没有winpe.wim,就启动U盘分区根目录的winpe.wim
作者: 527104427    时间: 2019-6-11 10:04
yjqd 发表于 2019-6-11 10:00
谢谢,成功了,果然是前面的%star_num%少加了0x

你的代码实现了我的目的:

更精炼一点,可以 cat --locatei=(hd1 --number=1 %l% | set star_num=0x
这样后面的 %star_num% 就不用加 0x 了
作者: yjqd    时间: 2019-6-11 10:25
527104427 发表于 2019-6-11 10:04
更精炼一点,可以 cat --locatei=(hd1 --number=1 %l% | set star_num=0x
这样后面的 %star_num% 就不用 ...

谢谢

只是问一问,如果U盘有两个及以上分区,且里有都有winpe.wim,不知你的代码能否排除U盘的分区,当然,实际情况我也只分一个区,分太多分区且都有winpe.wim也没意思

如果GRUB4DOS能根据设备类型排除U盘就方便了,可是它都认为是h类型
作者: 527104427    时间: 2019-6-11 10:52
本帖最后由 527104427 于 2019-6-11 10:55 编辑
yjqd 发表于 2019-6-11 10:25
谢谢

只是问一问,如果U盘有两个及以上分区,且里有都有winpe.wim,不知你的代码能否排除U盘的分区, ...


仔细看一下代码应该能够理解吧,所有hd1以外的分区都忽略,只需要hd1的第一个分区,而不管hd1有多少分区。

如果U盘是一启,应该都是hd0。被认作fd0的情况很少见了吧,可以忽略了。

不知道有没有判断设备类型的代码,我印象中没有。
作者: yjqd    时间: 2019-6-11 11:37
527104427 发表于 2019-6-11 10:52
仔细看一下代码应该能够理解吧,所有hd1以外的分区都忽略,只需要hd1的第一个分区,而不管hd1有多少分 ...

哦,明白了,U盘不管有多少分区都是hd0(如果U盘是一启)

不好意思,我看代码和写代码水平很吃力
作者: yjqd    时间: 2019-6-11 11:39
chishingchan 发表于 2019-6-10 17:09
grub4dos 命令参数我一点都不懂,遇到问题没人解答的情况下我也有好奇心。

看到说明文档里有此一行引起 ...

来看看,老五大元帅写了一个自动排除U盘的代码,在13楼
作者: yjqd    时间: 2019-6-11 12:45
chishingchan 发表于 2019-6-10 17:09
grub4dos 命令参数我一点都不懂,遇到问题没人解答的情况下我也有好奇心。

看到说明文档里有此一行引起 ...

谢谢你的建议

以前我从不评分,因为我也没详细了解评分的作用
后来我评过分,但发现容易引起矛盾,我现在也不会评分了,当然,别人的帮助会记住的,相信愿意参与技术的朋友也不会计较有没有评分
--------------------------------------------------------------
再客气的楼主也不可能把每个人的回复进行回复
--------------------------------------------------------------
坛子里有的人是很小气的,曾经看过一些帖子,有人先做出一个东西,又有人做了类似功能的东西来(没有抄袭),前者便跳了出来,在后者的帖子里指手画脚,这也是我现在不评分的原因之一
作者: kk_lee69    时间: 2021-2-14 22:55
yjqd 发表于 2019-6-11 12:45
谢谢你的建议

以前我从不评分,因为我也没详细了解评分的作用

不好意思 我程式功力不好  不知道是否 有誠品 寫入到MENU.LST 的 完整與法可以參考??




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