Originally posted by spectereye at 2009-2-27 03:27:
不过还是不太明白
我的原意是想 用for输出a1, a2, a3, 不知道应该怎样改?
好像echo !a%b%!单独输出可以, 放到for里面%b%的值就不会从1变到3了, 应该怎么写?
for 内的( echo !a%b%! )中的%b%的值,是在执行for前的值,也就是dos在取for 命令行时已经扩展了整个for内带%号的变量,所以for 内的 set b=%%a,
对echo !a%b%!中的%b%不会产生影响。
如果要取到set b=%%a后,%b%的值,只有使dos读取for命令行时,暂时不扩展,到echo !a%b%!时才扩展,结果才正确。
怎样做到呢?
dos读取命令行后有一特点就是会扩展带%号的变量,但是对连续的%%号,会每两个%合成一个%,所以:把echo !a%b%!,改成:echo !a%%b%%!,
怎么结果还是不对呢?
加个call 在前面,相当于外部调用:
call echo.!a%%b%%!
还是不对!
原来!!虽然可以延迟,但在call命令行时已经扩展了,即a%b%视为常规字符串了,看来只有这样:
call echo.%%a!b!%%
或call call echo.%%%%a%%b%%%%%%
才能得到正确的结果。
Last edited by netbenton on 2009-2-28 at 21:38 ]