无忧启动论坛

标题: 请解释以下命令的意思 [打印本页]

作者: 有阴也有阳    时间: 2016-1-18 22:23
标题: 请解释以下命令的意思
本帖最后由 有阴也有阳 于 2016-1-19 00:33 编辑

请解释以下命令的意思:
#iftitle only show when command in [] returns true
# set a variable named bootmgr where /bootmgr is found.
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
fallback +1
chainloader %bootmgr%/bootmgr
savedefault --wait=2

特别是iftitle是啥意思?
作者: 不点    时间: 2016-1-18 22:39
如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。
作者: 有阴也有阳    时间: 2016-1-18 22:49
本帖最后由 有阴也有阳 于 2016-1-18 22:50 编辑
不点 发表于 2016-1-18 22:39
如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。


我的理解:

1.按C键进入命令行。

2.键入“【】”号。

3.在“【】”号里键入returns true——[returns true]。

4.然后再按下回车键,于是就显现除了这条菜单。

对吗?

作者: 不点    时间: 2016-1-18 22:55
菜单哪有手动键入的。是自动显示的。

括号里面的命令是在 iftitle 一行的,如果它成功执行了,这个菜单项就自动有效,如果括号里面的命令执行失败了,那么这个菜单项就自动无效了,不会显示出来的。
作者: pz    时间: 2016-1-18 22:56
有阴也有阳 发表于 2016-1-18 22:49
我的理解:

1.按C键进入命令行。

应该是不对!
iftitle为条件菜单,通过某项条件判断是否显示菜单。
判断 [] 内的条件是否成立,只要条件不成立该菜单项目就无效,将不会显示。
作者: 有阴也有阳    时间: 2016-1-18 23:19
不点 发表于 2016-1-18 22:55
菜单哪有手动键入的。是自动显示的。

括号里面的命令是在 iftitle 一行的,如果它成功执行了,这个菜单 ...

        我明白了,当系统里面有Win7系统时,这条菜单就自动显现,系统里面要是没有Win7系统,

这条菜单就不显现,对吗?

作者: 不点    时间: 2016-1-18 23:46
有阴也有阳 发表于 2016-1-18 23:19
我明白了,当系统里面有Win7系统时,这条菜单就自动显现,系统里面要是没有Win7系统,

这条菜 ...

大致就是如此,不过,vista 以后的系统都有 bootmgr,所以,实际上是寻找 bootmgr ,如果发现了,就建立启动这个 bootmgr 的菜单项。


作者: wylgogogo    时间: 2016-1-18 23:49
     呵呵,就喜欢这种氛围,学到了。
作者: 有阴也有阳    时间: 2016-1-18 23:54
本帖最后由 有阴也有阳 于 2016-1-18 23:58 编辑
不点 发表于 2016-1-18 23:46
大致就是如此,不过,vista 以后的系统都有 bootmgr,所以,实际上是寻找 bootmgr ,如果发现了,就建立 ...


        
明白了:

[find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%]这条命令找到了bootmgr文件,

后面的菜单:load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%就显现出来;

[find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%]这条命令没有找到bootmgr文件,

后面的菜单:load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%就显现不出来。

谢谢!!!

作者: pcfan120    时间: 2016-1-19 01:12
學習了。。
作者: lbw2007    时间: 2016-1-19 11:08
本帖最后由 lbw2007 于 2016-1-19 11:11 编辑

感谢不点老师解答,受益匪浅!!!
我也来一个现学现卖,方便大家:
  1. iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
复制代码

搜索所有硬盘根目录包含“bootmgr”的设备,将第一个找到的设备设为当前设备。假设查找结果为(hd0,0),那么就会显示“load BOOTMGR of Windows VISTA/WIN7/WIN2008 on (hd0,0)”,否则根本不会显示这条菜单。
  1. fallback +1
复制代码

如果执行错误,则执行下一条菜单。
  1. chainloader %bootmgr%/bootmgr
复制代码

加载(hd0,0)根目录下的bootmgr文件
  1. savedefault --wait=2
复制代码

默认启动此项,延时2秒
作者: 有阴也有阳    时间: 2016-1-19 11:12
lbw2007 发表于 2016-1-19 11:08
感谢不点老师解答,受益匪浅!!!
我也来一个现学现卖,方便大家:

学习了,谢谢!!!
作者: lbw2007    时间: 2016-1-19 11:20
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
应该也可以简化成
iftitle [find --set-root --devices=h /bootmgr] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %@root^%
不用定义也可以吧
作者: 有阴也有阳    时间: 2016-1-19 11:28
lbw2007 发表于 2016-1-19 11:20
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows  ...

call 可以刷新环境变量,进入新的环境,例如下面的代码:
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
如果不加 call 则 --set-root 不能立即生效。

这里还要注意一点,整行命令在执行之前会被解析,解析的过程中,会将其中的变量替换成实际的值。%@root^% 的写法就是为了防止在解析命令行的时候将其扩展成实际的值,而是将其扩展成字符串 %@root%,以便下次解析的时候继续扩展。当 find --set-root --devices=h /bootmgr 执行成功后,需要执行 && call set bootmgr=%@root^%(此时 %@root^% 已经被扩展成 %@root% 了)的时候,又要执行一次解析,此时会将 %@root% 扩展成实际的值。

作者: lbw2007    时间: 2016-1-19 14:34
有阴也有阳 发表于 2016-1-19 11:28
call 可以刷新环境变量,进入新的环境,例如下面的代码:
iftitle [find --set-root --devices=h /bootm ...

怪不得要使用call,原来如此。学习了。谢谢!
作者: 有阴也有阳    时间: 2016-1-19 14:53
         也许是版本的原因,我用的grub4dos0.4.6a的这条隐藏的菜单在Win7系统下也不自动显现,所以我把它改成了非隐藏的、显现的:

        原来的隐藏的菜单:

#iftitle only show when command in [] returns true
# set a variable named bootmgr where /bootmgr is found.
iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
fallback +1
chainloader %bootmgr%/bootmgr
savedefault --wait=2


        修改过后的非隐藏的、显现的菜单:

title 查找和加载Windows VISTA/WIN7/WIN8/WIN10/WIN2008的系统引导文件—BOOTMGR文件
fallback +1
find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%
chainloader %bootmgr%/bootmgr
savedefault --wait=2

        这条修改过的菜单经实体机检测,一切正常。





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