联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!
Originally posted by stornager at 2007-6-27 21:23: 经过分析认为:call 调用的标签不能含有系统内置命令或外部命令,否则就会得不到理想结果。请大家多测试!!!
@echo off echo Starting... call :date echo End... exit/b :date echo This is the label :date line echo Please press any key to exit pause
今天晚上,在cmd里测试call,发现call date 有意想不到的结果。???可能大家早就知道啦。 由于时间关系,我要下机啦,明天再和大家讨论这个问题。
G:\>call date 当前日期: 2007-06-27 星期三 输入新日期: (年月日) G:\>date 当前日期: 2007-06-27 星期三 输入新日期: (年月日) G:\>
Originally posted by dikex at 2007-6-27 21:56: call调用标签时标签可以有“:”也可以没有,当没有时,而标签名恰好为某命令名时,系统就当你是想调用那个命令了; 指代不清的结果,平时养成 call :标签名 的习惯比较好
Originally posted by lxmxn at 2007-6-27 10:51 PM: 你测试过了没有?
Originally posted by stornager at 2007-6-27 23:01: 谢谢斑竹的指教,但是加了:命令提示符提示系统找不到指定的标签。:o:o:o对于call date的输出结果我感到惊奇,是因为我几乎没有直接在命令行敲入 ...
@echo off echo Beginning of test set ^^(set^^)=Batch call :%^(set^)% echo End of test pause&exit/b :%^(set^)% set n=1 2 3 4 5 6 7 8 echo %n% %n% %n% %n% echo %1% %1% %1% %1% ping -n 3 127.1>nul goto :eof :Batch echo This script is worked
Originally posted by lxmxn at 2007-6-27 11:35 PM: 之所以会出现“系统找不到指定的批处理标签 -”的错误提示,是因为“call :%^(set^)%”的时候,系统把“^(set^)”看作是一个变量,但是你并没有给他 ...
call :1(123) pause goto :EOF :1(123) echo a goto :EOF
call :1123) pause goto :EOF :ddd echo a goto :EOF
call :1(123) pause goto :EOF :1 echo a goto :EOF
echo a del %0
先做一个试验,写一个批处理,内容为@echo off pause echo a pause运行后先不要按任何键,在那个批处理上面右键——编辑,将echo a改为echo b,保存后转为那个正在运行的批处理的窗口,按一下任意键, 结果echo出来的是b而不是a! 再做一个试验,批处理内容如下:@echo off pause echo a pause同样运行后不要按任何键,然后把那个批处理文件删除或者重命名,接着转为批处理的运行窗口,按一下任意键,批处理直接退出而不执行下 面的语句,隐约看到一行报错的语句; 关于这个,以下为个人猜测: 批处理运行时并不会一开始就将所有的代码载入内存,而是每执行完一行才载入下一行的代码,于是我们就产生了试验里面中途改变代码后执 行的是修改后的代码; 具体到楼主的那个批处理,由于批处理在运行时把自身删除了,在执行完那个del的命令后系统想往下读取下一行命令时却发现找不到那个批处 理文件,于是就报错了。
@echo off pause echo a pause
set "^date^=123" call :%^date^% pause goto :EOF :123 echo a goto :EOF
set "^date^=123" call :%^date^% pause goto :EOF :%^date^% echo a goto :EOF
call :1(123) pause goto :EOF :1 echo %1 goto :EOF