Board logo

标题: for语句问题,变量无法赋值 [打印本页]

作者: wenqs27     时间: 2009-8-2 09:31    标题: for语句问题,变量无法赋值
for /f %%a in ('dir /b %~dp0') do (
set haha=%%a
echo %haha%)
pause

以上代码运行结果:
ECHO 处于打开状态。
ECHO 处于打开状态。
ECHO 处于打开状态。
ECHO 处于打开状态。
ECHO 处于打开状态。
ECHO 处于打开状态。
。。。
显然是haha变量没得到值。为何呢?

Last edited by wenqs27 on 2009-8-2 at 09:45 ]

作者: wenqs27     时间: 2009-8-2 10:08
这怎么可能,想不通?是我计算机有问题?

作者: netbenton     时间: 2009-8-2 11:14
%haha%号的变量在预处理时已经进行扩展了,也就是在for还没有执行以前

把echo %haha%改为:
call echo %%haha%%

或开变量延迟用

echo !haha!

作者: tireless     时间: 2009-8-2 11:21
要开启变量延迟:
@echo off
setlocal enabledelayedexpansion
for /f %%a in ('dir /b %~dp0') do (
set haha=%%a
echo !haha!
)
pause

什么情况下该使用变量延迟?
http://www.cn-dos.net/forum/viewthread.php?tid=20733

----------
如果 %%a 中含有英文感叹号“!”:
@echo off
for /f %%a in ('dir /b %~dp0') do (
set haha=%%a
setlocal enabledelayedexpansion
echo !haha!
endlocal
)
pause

简析环境变量和变量延迟特殊字符以及中介法的微妙关系
http://www.cn-dos.net/forum/viewthread.php?tid=30884

作者: wenqs27     时间: 2009-8-2 11:25
。。。好低级的错误。
看来还是太懒,平时不怎么编写代码。总是小处犯错。
明天就走了,开学了。。。暂别联盟一年。。。呵呵。
谢谢兄的回复,你的帖子我看过几篇,很不错的~~
联盟的新人总算没辜负前辈的付出(will兄,无奈何版主等),感谢所有给过我帮助的人,尤其是精神上的鼓励,谢谢你们!

作者: wenqs27     时间: 2009-8-2 11:26
谢谢4楼的!(回帖真快啊)