中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-02 05:55
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 问个关于CALL调用的问题 查看 1,098 回复 6
楼 主 问个关于CALL调用的问题 发表于 2006-10-21 02:50 ·  中国 北京 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
20年会员
UID 42793
状态 离线
问题代码如下:
@ECHO OFF
SETLOCAL
IF %1#==# GOTO :EOF
IF NOT %3#==# GOTO BEGIN
SET CMDFILE=%~S0
CALL:TEST %1 %2
GOTO :EOF

:BEGIN
ECHO %*
GOTO :EOF

:TEST
ECHO
CMD /C%CMDFILE% %* /ADD
GOTO :EOF


保存为.CMD文件后,我带参数运行
.CMD TEST
我想得到这样的输出


TEST /ADD /ADD
最主要的是最后一行.这段代码是可行的
但是如果我去掉代码中的 "CMD /C" 直接使用"%CMDFILE% %* /ADD"却不行,根本没把参数传递回去,为什么?

测试环境是XP下的CMD
2 发表于 2006-10-21 03:13 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
@ECHO OFF
IF %1#==# GOTO :EOF
IF NOT %3#==# GOTO BEGIN
SET CMDFILE=%~S0
GOTO:TEST %1 %2
GOTO :EOF

:BEGIN
ECHO %*
GOTO :EOF

:TEST
ECHO [%*]
%CMDFILE% %* /ADD
GOTO :EOF
3 发表于 2006-10-21 03:32 ·  中国 北京 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
20年会员
UID 42793
状态 离线
好办法!以前都没注意到GOTO还可以带参数过去...
多谢指点~问题解决了

再问下:使用CALL为何不能达到同样的效果?
4 发表于 2006-10-21 03:38 ·  中国 北京 联通
银牌会员
★★★
努力做坏人
积分 1,185
发帖 438
注册 2006-08-28 12:00
19年会员
UID 61449
来自 北京
状态 离线
GOTO 能带参数???我怎么不知道呢?还有qwe1234567版主我觉得GOTO:TEST %1 %2这条语句 应该 GOTO TEST %1 %2这样才对吧,唉,GOTO能带参数???第一次听说,呵呵.........
我今后在论坛的目标就是做个超级坏人!!!
5 发表于 2006-10-21 03:47 ·  中国 北京 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
20年会员
UID 42793
状态 离线
8好意思,小弟才疏学浅,GOTO能带参数只是我的理解,可能我理解的有点出入,但至少GOTO:TEST %1 %2是可行的,至于带不带冒号又有何关系.有心帮忙的话回答下我的问题吧.
再次谢谢 qwe1234567
6 发表于 2006-10-21 04:25 ·  中国 四川 南充 电信
超级版主
★★★★
我爱DOS
积分 5,310
发帖 2,044
注册 2005-09-26 12:00
20年会员
UID 42843
性别 男
来自 四川南充
状态 离线
7 发表于 2006-10-21 23:33 ·  中国 北京 联通
中级用户
★★
带走
积分 435
发帖 88
注册 2005-09-24 19:22
20年会员
UID 42793
状态 离线
我错了~~~确实是不带参数,理解错了,因为老大的这句GOTO:TEST %1 %2我才这么认为的,现在试试没有%1 %2一样行.但是有的环境下我想使用CALL呀,可是还没人帮我解答这个疑问,自己回去再想想先~
论坛跳转: