有阴也有阳 发表于 2016-1-18 22:23:15

请解释以下命令的意思

本帖最后由 有阴也有阳 于 2016-1-19 00:33 编辑

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

特别是iftitle是啥意思?

不点 发表于 2016-1-18 22:39:26

如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。

有阴也有阳 发表于 2016-1-18 22:49:05

本帖最后由 有阴也有阳 于 2016-1-18 22:50 编辑

不点 发表于 2016-1-18 22:39
如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。

我的理解:

1.按C键进入命令行。

2.键入“【】”号。

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

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

对吗?

不点 发表于 2016-1-18 22:55:41

菜单哪有手动键入的。是自动显示的。

括号里面的命令是在 iftitle 一行的,如果它成功执行了,这个菜单项就自动有效,如果括号里面的命令执行失败了,那么这个菜单项就自动无效了,不会显示出来的。

pz 发表于 2016-1-18 22:56:06

有阴也有阳 发表于 2016-1-18 22:49
我的理解:

1.按C键进入命令行。


应该是不对!
iftitle为条件菜单,通过某项条件判断是否显示菜单。
判断 [] 内的条件是否成立,只要条件不成立该菜单项目就无效,将不会显示。

有阴也有阳 发表于 2016-1-18 23:19:43

不点 发表于 2016-1-18 22:55
菜单哪有手动键入的。是自动显示的。

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

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

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

不点 发表于 2016-1-18 23:46:53

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

这条菜 ...

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

wylgogogo 发表于 2016-1-18 23:49:54

   呵呵,就喜欢这种氛围,学到了。

有阴也有阳 发表于 2016-1-18 23:54:00

本帖最后由 有阴也有阳 于 2016-1-18 23:58 编辑

不点 发表于 2016-1-18 23:46
大致就是如此,不过,vista 以后的系统都有 bootmgr,所以,实际上是寻找 bootmgr ,如果发现了,就建立 ...

      
明白了:

这条命令找到了bootmgr文件,

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

这条命令没有找到bootmgr文件,

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

谢谢!!!

pcfan120 发表于 2016-1-19 01:12:24

學習了。。

lbw2007 发表于 2016-1-19 11:08:55

本帖最后由 lbw2007 于 2016-1-19 11:11 编辑

感谢不点老师解答,受益匪浅!!!
我也来一个现学现卖,方便大家:
iftitle load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
搜索所有硬盘根目录包含“bootmgr”的设备,将第一个找到的设备设为当前设备。假设查找结果为(hd0,0),那么就会显示“load BOOTMGR of Windows VISTA/WIN7/WIN2008 on (hd0,0)”,否则根本不会显示这条菜单。
fallback +1
如果执行错误,则执行下一条菜单。
chainloader %bootmgr%/bootmgr
加载(hd0,0)根目录下的bootmgr文件
savedefault --wait=2
默认启动此项,延时2秒

有阴也有阳 发表于 2016-1-19 11:12:16

lbw2007 发表于 2016-1-19 11:08
感谢不点老师解答,受益匪浅!!!
我也来一个现学现卖,方便大家:



学习了,谢谢!!!

lbw2007 发表于 2016-1-19 11:20:02

iftitle load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr%
应该也可以简化成
iftitle load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %@root^%
不用定义也可以吧

有阴也有阳 发表于 2016-1-19 11:28:00

lbw2007 发表于 2016-1-19 11:20
iftitle load BOOTMGR of Windows...

call 可以刷新环境变量,进入新的环境,例如下面的代码:
iftitle 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:22

有阴也有阳 发表于 2016-1-19 11:28
call 可以刷新环境变量,进入新的环境,例如下面的代码:
iftitle

怪不得要使用call,原来如此。学习了。谢谢!

有阴也有阳 发表于 2016-1-19 14:53:45

         也许是版本的原因,我用的grub4dos0.4.6a的这条隐藏的菜单在Win7系统下也不自动显现,所以我把它改成了非隐藏的、显现的:

      原来的隐藏的菜单:

#iftitle only show when command in [] returns true
# set a variable named bootmgr where /bootmgr is found.
iftitle 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

      这条修改过的菜单经实体机检测,一切正常。
页: [1]
查看完整版本: 请解释以下命令的意思