[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
原帖由 随风 于 2008-6-11 22:34 发表
set aa=123&call echo %%aa%%

应该是set aa=123&call,echo %aa%
***共同提高***

TOP

我测试了的,确定
***共同提高***

TOP

原帖由 随风 于 2008-6-16 00:10 发表
那就奇怪了,我测试下面的代码冒号开头的就是结果。
echo off
set aa=123&call echo %%aa%%
:123

set bb=123&call echo %bb%
:ECHO 处于关闭状态。
pause

请兄注意是在cmd中不是在批处理中。
***共同提高***

TOP

原帖由 风行者 于 2008-6-16 00:43 发表
set aa=123 & echo %aa%
加空格不就行了吗?

以后还请兄弟先测试了再发吧(这样的测试很简单的)。
同时还有个方法,就是先在cmd中输入cmd /v:on(开启变量延迟,默认是关闭的)
然后再输入set aa=123&echo !aa!

[ 本帖最后由 zw19750516 于 2008-6-16 10:25 编辑 ]
***共同提高***

TOP

以下是在我电脑的cmd中运行的结果
  1. D:\文档资料\局域网\批处理>call cmd
  2. Microsoft Windows XP [版本 5.1.2600]
  3. (C) 版权所有 1985-2001 Microsoft Corp.
  4. D:\文档资料\局域网\批处理>set aa=123 & echo %aa%
  5. %aa%
  6. D:\文档资料\局域网\批处理>
复制代码
&&其实,这个错误不是兄弟犯的,是cmd“犯”的,而这就要说到cmd中的预处理机制了,通常(未开启变量延迟的情况下)cmd在处理输入的命令时,总是预先读取整体行命令然后再进行分析处理,于是在cmd中输入set aa=123 & echo %aa%,cmd就会直接先整行读取命令"set aa=123 & echo %aa%",然后再判断此前(在这一行前面)aa中是否已被赋值和定义(而实际上没有),这样cmd就会认为%aa%就是个输入的字符串而不是被定义的变量,自然就会输出为%aa%了,如要正确输出就必须换行或使用call延迟或开启变量延迟(在上面帖子中我已经给出了方法)。
   同时,在for循环语句和if判断语句的括号中如出现连续赋值的情况一样要开启变量延迟,或使用call延迟。
***共同提高***

TOP

返回列表