中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-07-19 07:42
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已解决]call %%var%% 为什么什么都不显示 查看 945 回复 5
楼 主 [已解决]call %%var%% 为什么什么都不显示 发表于 2009-10-08 18:38 ·  中国 湖北 襄阳 老河口市 电信
初级用户
积分 175
发帖 45
注册 2007-08-04 16:16
18年会员
UID 94640
性别 男
状态 离线

@echo off
set "test=echo.ok&echo.no"
call %%test%%
pause


以上命令是可以成功执行的,但是执行后什么都没有显示

根据预处理来解释

call: 第一次因为变量前是两个百分号,所以变量不被替换,然后脱掉一对百分号

变成 %test%

第二次变量前是一个百分号,然后替换%test%为echo.ok&echo.no

然后执行

根据ERRORLEVEL的值知道call 是执行成功的 可是为什么什么都没有显示呢?

各位版主 bat达人 帮忙分析一下啦 谢谢

[ Last edited by q8249014 on 2010-1-20 at 17:28 ]
2 发表于 2009-10-08 18:48 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
问题出在&上。

[ Last edited by Hanyeguxing on 2009-10-8 at 18:52 ]
3 发表于 2009-10-09 10:34 ·  中国 湖北 襄阳 老河口市 电信
初级用户
积分 175
发帖 45
注册 2007-08-04 16:16
18年会员
UID 94640
性别 男
状态 离线
Originally posted by Hanyeguxing at 2009-10-8 06:48 PM:
问题出在&上。

[ Last edited by Hanyeguxing on 2009-10-8 at 18:52 ]


没回复到正点上哦
4 发表于 2009-10-09 11:22 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
问题出在call 在第2次变量扩展时对&的处理上

[ Last edited by Hanyeguxing on 2009-10-9 at 11:27 ]
5 发表于 2009-10-09 20:07 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
19年会员
UID 59307
状态 离线
预处理是相当 “奇怪” 的!加上 P 本身对特殊字符的处理方法特殊就变成这个样子了,我想只要看遍所有有关预处理的帖子,应该会有所得。

要显示可以这样:

@echo off
set "test=echo.ok&echo.no"
call %%%test%%
pause

原因复杂到我说不清。
┌───────┐
├→学习→实践→┤
└───────┘
6 发表于 2009-10-14 16:04 ·  中国 湖北 襄阳 老河口市 电信
初级用户
积分 175
发帖 45
注册 2007-08-04 16:16
18年会员
UID 94640
性别 男
状态 离线
首先感谢两位的回复~~!

4f的朋友还是没有回答到正点上哦 呵呵

当然我也觉得是处理“&”时出的问题 可是分析不出来为什么

请你试一下 call a^&a

个人觉得可能是call命令的一个bug

回5f
Originally posted by wxcute at 2009-10-9 08:07 PM:
预处理是相当 “奇怪” 的!加上 P 本身对特殊字符的处理方法特殊就变成这个样子了,我想只要看遍所有有关预处理的帖子,应该会有所得。

要显 ...


因为我是想达到一个延迟处理的效果,说不清楚啦 与其如上不如这样



@echo off
set "test=echo.ok&echo.no"
%test%
pause


你楼上的代码,之所以可以成功显示,是因为变量的扩展在第一次预处理的时候就被解析了。 call %test% 同样道理

还有预处理的解析没有那么“奇怪”,我预计在这几天出3篇帖子,给大家详细讲解一下预处理的一些知识
还是想请有能力的朋友帮忙分析一下

[ Last edited by q8249014 on 2009-10-14 at 16:15 ]
论坛跳转: