中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 程序第一次运行的时候一个变量取不到值
作者:
标题: 程序第一次运行的时候一个变量取不到值 上一主题 | 下一主题
wydesign
新手上路





积分 7
发帖 4
注册 2007-11-6
状态 离线
『楼 主』:  程序第一次运行的时候一个变量取不到值

@echo off FOR /F "usebackq tokens=3* delims= " %%i in (`find /C " " %2`) do set total1=%%i FOR /F "usebackq tokens=3* delims= " %%i in (`find /V /C " " %2`) do set total2=%%i set /A total=%total1%+%total2% IF "%1"=="-f" ( set /A pos=%total%-6 more +%pos% %2 goto begin ) set /A t=-%1 set /A pos=%total%-%t% IF %total% GEQ %t% ( more +%pos% %2 ) ELSE ( echo toltal line is: %total% echo press any key show %2 content. pause>nul more %2 ) IF "%1"=="-f" ( :begin set /A totalpre=total timeout /T 1 /NOBREAK >nul FOR /F "usebackq tokens=3* delims= " %%i in (`find /C " " %2`) do set total1=%%i FOR /F "usebackq tokens=3* delims= " %%i in (`find /V /C " " %2`) do set total2=%%i set /A total=%total1%+%total2% IF %totalpre% NEQ %total% ( set /A t=%total%-%totalpre% set /A pos=%total%-%t% more +%pos% %2 ) GOTO begin ) @echo on 程序如上 : 该程序是用来仿unix环境tail命令,如果执行命令tail -f filename more +%pos% %2 中有pos取不到值,第二次运行时就正常了,是什么问题呢?


2008-7-7 17:27
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  

原因是你的%pos%变量处于if的复合语句体内,需要用到变量延迟。 可以在more +%pos% %2前面加上"Setlocal EnableDelayedExpansion",然后再more +!pos! %2来显示。 具体的内容就请参考set命令的帮助及论坛关于“变量延迟”有关的讨论贴了。


2008-7-7 23:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: