无忧启动论坛

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

[已解决] 请解释以下命令的意思

[复制链接]
跳转到指定楼层
1#
发表于 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 [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是啥意思?
2#
发表于 2016-1-18 22:39:26 | 只看该作者
如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。

点评

我的理解: 1.按C键进入命令行。 2.键入“【】”号。 3.在“【】”号里键入returns true——[returns true]. 4.然后再按下回车键,于是就显现除了这条菜单。 对吗?  详情 回复 发表于 2016-1-18 22:49
回复

使用道具 举报

3#
 楼主| 发表于 2016-1-18 22:49:05 | 只看该作者
本帖最后由 有阴也有阳 于 2016-1-18 22:50 编辑
不点 发表于 2016-1-18 22:39
如果括号里面的命令返回真值,则显示这个菜单项,否则不显示这个菜单项。


我的理解:

1.按C键进入命令行。

2.键入“【】”号。

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

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

对吗?

点评

pz
应该是不对! iftitle为条件菜单,通过某项条件判断是否显示菜单。 判断 [] 内的条件是否成立,只要条件不成立该菜单项目就无效,将不会显示。  详情 回复 发表于 2016-1-18 22:56
回复

使用道具 举报

4#
发表于 2016-1-18 22:55:41 | 只看该作者
菜单哪有手动键入的。是自动显示的。

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

点评

我明白了,当系统里面有Win7系统时,这条菜单就自动显现,系统里面要是没有Win7系统, 这条菜单就不显现,对吗?  详情 回复 发表于 2016-1-18 23:19
回复

使用道具 举报

5#
发表于 2016-1-18 22:56:06 | 只看该作者
有阴也有阳 发表于 2016-1-18 22:49
我的理解:

1.按C键进入命令行。

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

使用道具 举报

6#
 楼主| 发表于 2016-1-18 23:19:43 | 只看该作者
不点 发表于 2016-1-18 22:55
菜单哪有手动键入的。是自动显示的。

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

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

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

点评

大致就是如此,不过,vista 以后的系统都有 bootmgr,所以,实际上是寻找 bootmgr ,如果发现了,就建立启动这个 bootmgr 的菜单项。  详情 回复 发表于 2016-1-18 23:46
回复

使用道具 举报

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

这条菜 ...

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

点评

谢谢!!!  详情 回复 发表于 2016-1-18 23:54
回复

使用道具 举报

8#
发表于 2016-1-18 23:49:54 | 只看该作者
     呵呵,就喜欢这种氛围,学到了。
回复

使用道具 举报

9#
 楼主| 发表于 2016-1-18 23:54:00 | 只看该作者
本帖最后由 有阴也有阳 于 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%就显现不出来。

谢谢!!!
回复

使用道具 举报

10#
发表于 2016-1-19 01:12:24 | 只看该作者
學習了。。
回复

使用道具 举报

11#
发表于 2016-1-19 11:08:55 | 只看该作者
本帖最后由 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
回复

使用道具 举报

12#
 楼主| 发表于 2016-1-19 11:12:16 | 只看该作者
lbw2007 发表于 2016-1-19 11:08
感谢不点老师解答,受益匪浅!!!
我也来一个现学现卖,方便大家:

学习了,谢谢!!!
回复

使用道具 举报

13#
发表于 2016-1-19 11:20:02 | 只看该作者
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^%
不用定义也可以吧

点评

call 可以刷新环境变量,进入新的环境,例如下面的代码: iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr% 如果不加 cal  详情 回复 发表于 2016-1-19 11:28
回复

使用道具 举报

14#
 楼主| 发表于 2016-1-19 11:28:00 | 只看该作者
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% 扩展成实际的值。

点评

怪不得要使用call,原来如此。学习了。谢谢!  详情 回复 发表于 2016-1-19 14:34
回复

使用道具 举报

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

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

使用道具 举报

16#
 楼主| 发表于 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 [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

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

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-13 18:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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