中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » for循环为什么只显示echo的状态?
作者:
标题: for循环为什么只显示echo的状态? 上一主题 | 下一主题
pcl83
初级用户





积分 32
发帖 13
注册 2006-10-3
状态 离线
『楼 主』:  for循环为什么只显示echo的状态?

请看以下代码(批处理文件中):
-------------------------------------------
@echo off
FOR /L %%i in (1,1,3) do (
set /a T=%%
echo %T%)
pause>nul
--------------------------------------------
程序运行之后并没有我们预测的那样出现
1
2
3
而是:
ECHO 处于关闭状态。
........
究竟怎么回事,有什么解决办法?


──────────────── 版务记录 ────────────────
执行:namejm
原标题:高手速来帮忙
现标题:for循环为什么只显示echo的状态?
说明:因原标题过于模糊,不便于论坛的搜索和管理,在版主提示发表三日
  之后,楼主尚未更改标题,现由本人代无奈何版主强制修改标题,并
  扣除楼主4点积分(因为论坛积分规则有变,酌情减轻了处罚)。
──────────────── 版务记录 ────────────────


[ Last edited by namejm on 2006-10-19 at 01:09 ]

   此帖被 -4 点积分     点击查看详情   
评分人:【 namejm 分数: -4  时间:2006-10-19 01:10


2006-10-3 09:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 2 楼』:  

这是变量延迟的问题, 另外发现楼主的代码写错了, set /a T=%%

代码修改如下:
@echo off
setlocal enabledelayedexpansion
for /l %%i in (1,1,3) do (
    set T=%%i
    echo !T!
)
pause>nul


2006-10-3 09:47
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
pcl83
初级用户





积分 32
发帖 13
注册 2006-10-3
状态 离线
『第 3 楼』:  

谢谢,无尽感激

2006-10-3 09:53
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
KIKOOOO
初级用户





积分 34
发帖 12
注册 2006-9-25
状态 离线
『第 4 楼』:  

这里为什么要用!T!
不能用%T%  ?

2006-10-3 10:01
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 5 楼』:  

这牵涉到环境变量延迟的问题, 像这样的复合语句, cmd会对语句中的变量进行预处理. 这样for语句中的%T%就会被替换. 而%T%这个变量在for之前没有定义, 所以echo %T%显示echo 处于关闭状态.

开启延缓的环境变量, 就是不让cmd对复合语句中的环境变量进行预先处理. 从而使T这个变量能够正常地显示. 因为开启了环境变量, 所以要把 % 改成 ! ...

2006-10-3 10:14
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
无奈何
荣誉版主





积分 1338
发帖 356
注册 2005-7-15
状态 离线
『第 6 楼』:  


┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃▓ 中国DOS联盟 >> 批处理室版务管理                    _ □ ×┃
┠──────────────────────────────┬┨
┃Microsoft Windows XP [版本 5.1.2600]                        │┃
┃(C) 版权所有 1985-2001 Microsoft Corp.                      │┃
┃                                                            │┃
┃C:\无奈何>版务管理.cmd                                      │┃
┃                                                            │┃
┃                       版主提示                           │┃
┃为了便于论坛用户浏览和版主管理,请您修改本主题的标题,以简要│┃
┃叙述主题的内容或意图如果您确认标题不需要修改,请继续回复该主│┃
┃题进行申辩,若申辩理由充分,将取消该通知如果您确认标题需要修│┃
┃改,请点击该主题首帖下方"编辑"按钮,在编辑页面中修改标题栏│┃
┃如果此通知发出三日后您仍未进行申诉或修改,将由版主进行修改,│┃
┃并对作者进行相应处罚处罚为扣除8点积分,包括追回您因发表主题│┃
┃奖励的6分和因标题违规而惩罚性扣除的2分在得知您做出积极恰当│┃
┃的回应后,版主将在三个工作日内删除本提示以消除对您的不利影响│┃
┃                                                            │┃
┃C:\无奈何>▂                                                │┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┷┛




  ☆开始\运行 (WIN+R)☆
%ComSpec% /cset,=何奈无── 。何奈可无是原,事奈无做人奈无&for,/l,%i,in,(22,-1,0)do,@call,set/p= %,:~%i,1%<nul&ping/n 1 127.1>nul

2006-10-3 10:51
查看资料  发送邮件  发短消息 网志  OICQ (105400208)  编辑帖子  回复  引用回复
不得不爱
超级版主

我爱DOS


积分 5310
发帖 2044
注册 2005-9-26
来自 四川南充
状态 离线
『第 7 楼』:  

下面是不用!T!的!
@echo off
FOR /L %%i in (1,1,3) do set a=%%i&call :1
pause>nul
goto :eof
:1
echo %a%
[ Last edited by qwe1234567 on 2006-10-3 at 22:05 ]



我的网络U盘 我的网络第2个U盘
论坛软件下载链接
灵雨飘零论坛  
论坛新手必读,所有人的基本行为准则
刷QQ空间人气、留言的小软件
2006-10-3 21:58
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: