标题: [文本处理] [已解决]批处理中只用一句话能set赋值并输出吗? [打印本页]
作者: xiaoxx 时间: 2008-6-11 22:22 标题: [已解决]批处理中只用一句话能set赋值并输出吗?
比如在cmd里输入如下句子
set aa=123&echo %aa%
在执行完本句后,aa的值才能被使用,本句中echo %aa%是空..
如果想在一句话里设置aa的值并且输出,是否能够做到?
调用C++的system()命令时,发现如果要分成2句,好像无法获得由上句赋的值,
.
作者: 随风 时间: 2008-6-11 22:34
- set aa=123&call echo %%aa%%
复制代码
作者: batman 时间: 2008-6-15 23:55
原帖由 随风 于 2008-6-11 22:34 发表
set aa=123&call echo %%aa%%
应该是set aa=123&call,echo %aa%
作者: 随风 时间: 2008-6-16 00:05
原帖由 zw19750516 于 2008-6-15 23:55 发表
应该是set aa=123&call,echo %aa%
你确定吗?
作者: batman 时间: 2008-6-16 00:07
我测试了的,确定
作者: 随风 时间: 2008-6-16 00:10
那就奇怪了,我测试下面的代码冒号开头的就是结果。
:- @echo off
- set aa=123&call echo %%aa%%
- :123
-
- set bb=123&call echo %bb%
- :ECHO 处于关闭状态。
- pause
复制代码
作者: batman 时间: 2008-6-16 00:14
原帖由 随风 于 2008-6-16 00:10 发表
那就奇怪了,我测试下面的代码冒号开头的就是结果。
echo off
set aa=123&call echo %%aa%%
:123
set bb=123&call echo %bb%
:ECHO 处于关闭状态。
pause
请兄注意是在cmd中不是在批处理中。
作者: 随风 时间: 2008-6-16 00:22
!!!!啊 。。。 !
无语,错了。。。。
作者: 风行者 时间: 2008-6-16 00:43
set aa=123 & echo %aa%
加空格不就行了吗?
作者: batman 时间: 2008-6-16 10:24
原帖由 风行者 于 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 编辑 ]
作者: 风行者 时间: 2008-6-16 11:36
这个我测试是可以的!就是在123后加空格&后加空格啊。如果有错请指出好吗?
作者: more 时间: 2008-6-16 11:48
原帖由 风行者 于 2008-6-16 11:36 发表
这个我测试是可以的!就是在123后加空格&后加空格啊。如果有错请指出好吗?
先把当前CMD窗口关掉,再打开另一个CMD窗口试试???
作者: batman 时间: 2008-6-16 12:11
以下是在我电脑的cmd中运行的结果- D:\文档资料\局域网\批处理>call cmd
- Microsoft Windows XP [版本 5.1.2600]
- (C) 版权所有 1985-2001 Microsoft Corp.
-
- D:\文档资料\局域网\批处理>set aa=123 & echo %aa%
- %aa%
-
- D:\文档资料\局域网\批处理>
复制代码
&&其实,这个错误不是兄弟犯的,是cmd“犯”的,而这就要说到cmd中的预处理机制了,通常(未开启变量延迟的情况下)cmd在处理输入的命令时,总是预先读取整体行命令然后再进行分析处理,于是在cmd中输入set aa=123 & echo %aa%,cmd就会直接先整行读取命令"set aa=123 & echo %aa%",然后再判断此前(在这一行前面)aa中是否已被赋值和定义(而实际上没有),这样cmd就会认为%aa%就是个输入的字符串而不是被定义的变量,自然就会输出为%aa%了,如要正确输出就必须换行或使用call延迟或开启变量延迟(在上面帖子中我已经给出了方法)。
同时,在for循环语句和if判断语句的括号中如出现连续赋值的情况一样要开启变量延迟,或使用call延迟。
作者: 风行者 时间: 2008-6-16 13:26
呵呵,学习了!版本强啊
作者: sjzong 时间: 2009-4-13 23:58
高手风采!真精彩啊!
作者: hjfeng1988 时间: 2011-10-21 17:47
回复 10# batman
同一cmd中,如果先运行了set aa=123 & call echo %aa%
再运行set aa=123 & echo %aa%
也是能显示123。9楼大意了。
作者: ai20110304 时间: 2018-6-10 08:35
环境变量延迟和预处理机制 是硬伤
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |