Board logo

标题: 问个关于CALL调用的问题 [打印本页]

作者: 0401     时间: 2006-10-21 02:50    标题: 问个关于CALL调用的问题

问题代码如下:
@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]
[TEST /ADD]
TEST /ADD /ADD
最主要的是最后一行.这段代码是可行的
但是如果我去掉代码中的 "CMD /C" 直接使用"%CMDFILE% %* /ADD"却不行,根本没把参数传递回去,为什么?

测试环境是XP下的CMD
作者: 不得不爱     时间: 2006-10-21 03:13
@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
作者: 0401     时间: 2006-10-21 03:32
好办法!以前都没注意到GOTO还可以带参数过去...
多谢指点~问题解决了

再问下:使用CALL为何不能达到同样的效果?
作者: 9527     时间: 2006-10-21 03:38
GOTO 能带参数???我怎么不知道呢?还有qwe1234567版主我觉得GOTO:TEST %1 %2这条语句 应该 GOTO TEST %1 %2这样才对吧,唉,GOTO能带参数???第一次听说,呵呵.........
作者: 0401     时间: 2006-10-21 03:47
8好意思,小弟才疏学浅,GOTO能带参数只是我的理解,可能我理解的有点出入,但至少GOTO:TEST %1 %2是可行的,至于带不带冒号又有何关系.有心帮忙的话回答下我的问题吧.
再次谢谢 qwe1234567
作者: 不得不爱     时间: 2006-10-21 04:25
GOTO 是不带参数的,带不带冒号都一样
作者: 0401     时间: 2006-10-21 23:33
我错了~~~确实是不带参数,理解错了,因为老大的这句GOTO:TEST %1 %2我才这么认为的,现在试试没有%1 %2一样行.但是有的环境下我想使用CALL呀,可是还没人帮我解答这个疑问,自己回去再想想先~