![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-25 06:59 |
共 47,813 主题排行 / 349,918 发帖 / 今日 1 篇 / 48,274 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » call 能调用什么 |
| 可打印版本 4,264 / 19 |
| 第1楼 bjsh | 发表于 2007-03-17 00:51 |
| 银牌会员 发帖 621 积分 2,000 | |
|
call 能调用什么 只知道 call能调用 另一个批处理或者程序;
还有标签; 看了些东西;似乎又觉得可以调用命令; 我见到的是 调用了 echo 但是想不明白; 到底这里是怎么用的呢? 用call 调用其他命令的好处或者用途是什么呢?? 能给个例子做一下解释吗 |
|
| 第2楼 bjsh | 发表于 2007-03-17 01:40 |
| 银牌会员 发帖 621 积分 2,000 | |
|
自己钻研了一下;
研究了lxmxn的
代码 我的理解如下
利用循环
那么能否用一下代码来实现呢
输出结果
所以错误 分析原因 是因为 缺少 变量延迟; 利用call来调用echo 命令 代码如下 就是lxmxn的代码
结果
结果符合要求 所以call 实现了近似变量延迟的作用 不知道我理解的是否正确; 还有别的什么例子 来演示下 call 调用命令的 神奇之处吗? [ Last edited by bjsh on 2007-3-16 at 12:46 PM ] |
|
| 第3楼 htysm | 发表于 2007-03-17 03:09 |
| 高级用户 发帖 415 积分 866 | |
|
我也是,对CALL是一知半解呀.
|
|
| 第4楼 xycoordinate | 发表于 2007-03-17 03:28 |
| 中级用户 发帖 228 积分 493 来自 安徽 | |
|
所以错误 分析原因 是因为 缺少 变量延迟
@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 继续关注。。。。。。 |
|
| 第5楼 mtiankong | 发表于 2007-04-21 01:15 |
| 初级用户 发帖 38 积分 70 | |
|
明白了。。。。
|
|
| 第6楼 zhoushijay | 发表于 2007-04-21 01:43 |
| 高级用户 发帖 375 积分 845 | |
|
有可能call是把变量%#:~%%$,1%调出了for循环,从而达到与变量延迟相同的效果
|
|
| 第7楼 everest79 | 发表于 2007-04-21 02:11 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
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 ] |
|
| 第8楼 vkill | 发表于 2007-04-21 02:16 |
| 金牌会员 发帖 1,744 积分 4,103 来自 甘肃.临泽 | |
|
貌似这个用call是屏蔽命令回显
|
|
| 第9楼 everest79 | 发表于 2007-04-21 02:33 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
怎么屏蔽?
|
|
| 第10楼 flyinspace | 发表于 2007-04-21 03:49 |
| 银牌会员 发帖 517 积分 1,206 | |
|
set pri1=
set test=%pri1% set pri1=999 echo %test% => out: %pri1% call echo %test% => out:999 这个不明白啊?有调用错误的提示。 |
|
| 第11楼 everest79 | 发表于 2007-04-21 04:13 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
没有=>后边的
|
|
| 第12楼 flyinspace | 发表于 2007-04-21 04:18 |
| 银牌会员 发帖 517 积分 1,206 | |
|
ECHO 处于关闭状态。
请按任意键继续. . . 运行后提示这个??? 多了一个文件。里面的内容是 =999 这个有什么用啊? |
|
| 第13楼 everest79 | 发表于 2007-04-21 04:21 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
set pri1=
set test=%pri1% set pri1=999 echo %test% call echo %test% 是这样的 echo %test%会显示 字符串"%pri1%" call echo %test%显示的是999 |
|
| 第14楼 htysm | 发表于 2007-04-21 05:02 |
| 高级用户 发帖 415 积分 866 | |
|
ls ,保存成BAT文件,在VISTA下执行的结果是:
附件 无标题.jpg (7.28 KiB) |
|
| 第15楼 everest79 | 发表于 2007-04-21 06:52 |
| 金牌会员 发帖 1,127 积分 2,564 | |
|
我这边没条件在vista下测试,那你需要仔细研究下vista与xp的cmd有什么不同啦,呵呵
|
|
| 1 2 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |