无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 4613|回复: 10
打印 上一主题 下一主题

[已解决] 变量相关

[复制链接]
1#
发表于 2013-12-21 12:32:40 | 显示全部楼层
正好相反  第一个是根设备  第二个是字符串  加^可以防止变量被扩展

点评

保存为字符串依然具有变量效果是吗? 你看看下面这个是对的吗? iftitle [find --set-root --devices=h /bootmgr && call set bootmgr=%@root^%] load BOOTMGR of Windows VISTA/WIN7/WIN2008 on %bootmgr% ch  详情 回复 发表于 2013-12-21 13:50
回复

使用道具 举报

2#
发表于 2013-12-23 09:27:21 | 显示全部楼层
1549957235 发表于 2013-12-21 13:50
保存为字符串依然具有变量效果是吗?  你看看下面这个是对的吗?
iftitle [find --set-root --devices=h ...

保存成字符串就没有效果了  命令没什么问题

将bootmgr=%@root^%替换为bootmgr=%@root%那命令就不一定起作用了  

因为在执行find --set-root --devices=h /bootmgr && call set bootmgr=%@root%之前  %@root%已经被扩展成当前的root设备了  就算在其他设备上找到bootmgr文件  bootmgr变量的值也不会更新  还是find之前的root设备名
回复

使用道具 举报

3#
发表于 2013-12-23 14:01:01 | 显示全部楼层
stevenldj 发表于 2013-12-23 13:27
我的理解:
bootmgr=%@root^%  可以使 bootmgr 随着 @root 变化,如果 @root 发生变化,则 bootmgr 也跟着 ...

你需要理解的是call的作用和对变量的处理  一行命令里的变量在执行这行命令之前就已经被扩展了

假设当前root为(cd)   不存在变量bootroot

如果写成  find --set-root /bootmgr && set bootroot=%@root%

执行时被扩展为  find --set-root /bootmgr && set bootroot=(cd)  执行结果为变量bootroot的值是(cd)

如果写成  find --set-root /bootmgr && set bootroot=%@root^%

执行时被扩展为  find --set-root /bootmgr && set bootroot=%@root%  执行结果为变量bootroot的值是%@root%这个字符串  没有被扩展

如果写成  find --set-root /bootmgr && call set bootroot=%@root^%

执行时被扩展为 find --set-root /bootmgr && call set bootroot=%@root%

假设在(hd0,0)上找到了文件  那当前root为(cd)  执行find --set-root /bootmgr后当前root为(hd0,0)  执行call会进入新的环境  在新环境中先扩展call后面的set bootroot=%@root%命令为set bootroot=(hd0,0)  然后执行set bootroot=(hd0,0)  最终执行完毕后变量bootroot值为(hd0,0)

假如所有设备上都找不到/bootmgr文件  执行find --set-root /bootmgr会失败  不再执行&&符号后面的call set bootroot=%@root%  最终执行完毕后还是不存在变量bootroot

点评

我理解了,整行命令在执行之前会被解析,解析的过程中,会将其中的变量替换成实际的值。 %@root^% 的写法就是为了防止在解析命令行的时候将其扩展成实际的值,而是将其扩展成字符串 %@root%,以便下次解析的时候  详情 回复 发表于 2013-12-23 15:59

评分

参与人数 1无忧币 +5 收起 理由
1549957235 + 5

查看全部评分

回复

使用道具 举报

4#
发表于 2013-12-24 14:45:23 | 显示全部楼层
pseudo 发表于 2013-12-24 11:58
这样子复杂了。我已回复:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=323088&extra=page%3D1

不复杂  有的时候必须用call  不能用&;  

&;前命令为真的话表示后续命令都可执行  有时会出现逻辑错误

点评

还有这种事  详情 回复 发表于 2013-12-24 17:02
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-6-13 02:10

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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