中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: call 能调用什么 上一主题 | 下一主题
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『楼 主』:  call 能调用什么

只知道 call能调用 另一个批处理或者程序;
还有标签;

看了些东西;似乎又觉得可以调用命令;

我见到的是 调用了 echo

但是想不明白;

到底这里是怎么用的呢?

用call 调用其他命令的好处或者用途是什么呢??

能给个例子做一下解释吗

2007-3-17 00:51
查看资料  发送邮件  发短消息 网志   编辑帖子
bjsh
银牌会员





积分 2000
发帖 621
注册 2007-1-1
状态 离线
『第 2 楼』:  

自己钻研了一下;
研究了lxmxn的

  Quote:

@echo off
set #=abcdefghijklmnopqrstuvwxyz
for,/l,%%$,in,(-26,1,-1)do,call,echo,%%#:~%%$,1%%
pause

代码
我的理解如下

  Quote:

::echo %#:1,1%
  echo %#:2,1%
  ........
  ........
  echo %#:26,1%

利用循环

  Quote:

echo %#:%%$,1%

那么能否用一下代码来实现呢

  Quote:

@echo off
set #=abcdefghijklmnopqrstuvwxyz
for /l %%$ in (-26,1,-1) do echo %#:~%%$,1%
pause

输出结果

  Quote:

abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz     26行
................
...............
abcdefghijklmnopqrstuvwxyz

所以错误   分析原因   是因为 缺少 变量延迟;


利用call来调用echo 命令
代码如下
就是lxmxn的代码

  Quote:

@echo off
set #=abcdefghijklmnopqrstuvwxyz
for /l %%$ in (-26,1,-1) do call echo %%#:~%%$,1%%
pause

结果

  Quote:

a
b
c
d
...
...
z

结果符合要求

所以call 实现了近似变量延迟的作用
不知道我理解的是否正确;

还有别的什么例子 来演示下 call 调用命令的 神奇之处吗?

[ Last edited by bjsh on 2007-3-16 at 12:46 PM ]

2007-3-17 01:40
查看资料  发送邮件  发短消息 网志   编辑帖子
htysm
高级用户




积分 866
发帖 415
注册 2005-12-4
状态 离线
『第 3 楼』:  

我也是,对CALL是一知半解呀.

2007-3-17 03:09
查看资料  发送邮件  发短消息 网志   编辑帖子
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 4 楼』:  

所以错误   分析原因   是因为 缺少 变量延迟
@echo off
set #=abcdefghijklmnopqrstuvwxyz
for /l %%$ in (-26,1,-1) do echo %#:~%%$,1%
pause

有可能呀!!!
修改一下:
@echo off
setlocal enabledelayedexpansion
set #=abcdefghijklmnopqrstuvwxyz
for /l %%$ in (-26,1,-1) do echo !#:~%%$,1!

就能得到:
a
b
c
d
...
...
z

继续关注。。。。。。

2007-3-17 03:28
查看资料  发送邮件  发短消息 网志  OICQ (226308607)  编辑帖子
mtiankong
初级用户





积分 70
发帖 38
注册 2007-3-24
状态 离线
『第 5 楼』:  

明白了。。。。

2007-4-21 01:15
查看资料  发送邮件  发短消息 网志   编辑帖子
zhoushijay
高级用户

Autowalk


积分 845
发帖 375
注册 2007-3-3
状态 离线
『第 6 楼』:  

有可能call是把变量%#:~%%$,1%调出了for循环,从而达到与变量延迟相同的效果

2007-4-21 01:43
查看资料  发送邮件  发短消息 网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 7 楼』:  

for 在初始化时已将引用变量全部扩展,所以这时for内的变量已经是实际值,而不在是扩展字符,也就是静态值,针对这一特点,又出现了变量延迟,反过来说就是一种在for这种命令类型中充许动态存在的变量,而call的作用就像是在当前命令进程下建立了一个子进程,而这个子进程的变量是与当前CMD的变量缓存同步的,这样也是起到了类似延迟的作用,针对变量,call命令还有一个就是多重引用符的特征
set pri1=
set test=%pri1%
set pri1=999
echo %test% =>  out: %pri1%
call echo %test% => out:999
以上例子中=>符号后的为屏幕输出,这是在CMD交互模式下的操作,因为批处理中对引用符敏感,所以需要增加多余的引用符号,这也间接证明了,call是工作在如同子进程下的一个环境中的

[ Last edited by everest79 on 2007-4-20 at 01:12 PM ]

2007-4-21 02:11
查看资料  发短消息 网志   编辑帖子
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 8 楼』:  

貌似这个用call是屏蔽命令回显

2007-4-21 02:16
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 9 楼』:  

怎么屏蔽?

2007-4-21 02:33
查看资料  发短消息 网志   编辑帖子
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 10 楼』:  

set pri1=
set test=%pri1%
set pri1=999
echo %test% =>  out: %pri1%
call echo %test% => out:999

这个不明白啊?有调用错误的提示。



知,不觉多。不知,乃求知
2007-4-21 03:49
查看资料  发短消息 网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 11 楼』:  

没有=>后边的

2007-4-21 04:13
查看资料  发短消息 网志   编辑帖子
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 12 楼』:  

ECHO 处于关闭状态。
请按任意键继续. . .

运行后提示这个???

多了一个文件。里面的内容是 =999

这个有什么用啊?



知,不觉多。不知,乃求知
2007-4-21 04:18
查看资料  发短消息 网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 13 楼』:  

set pri1=
set test=%pri1%
set pri1=999
echo %test%
call echo %test%

是这样的
echo %test%会显示 字符串"%pri1%"
call echo %test%显示的是999

2007-4-21 04:21
查看资料  发短消息 网志   编辑帖子
htysm
高级用户




积分 866
发帖 415
注册 2005-12-4
状态 离线
『第 14 楼』:  

ls ,保存成BAT文件,在VISTA下执行的结果是:

附件 1: 无标题.jpg (2007-4-21 05:02, 7.28 K,下载次数: 1)




欢迎你到批处理爱好者联盟QQ群:18023953
2007-4-21 05:02
查看资料  发送邮件  发短消息 网志   编辑帖子
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 15 楼』:  

我这边没条件在vista下测试,那你需要仔细研究下vista与xp的cmd有什么不同啦,呵呵

2007-4-21 06:52
查看资料  发短消息 网志   编辑帖子
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: