![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-09 02:20 |
共 47,811 主题排行 / 349,895 发帖 / 今日 0 篇 / 48,253 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 程序第一次运行的时候一个变量取不到值 |
| 可打印版本 717 / 1 |
| 第1楼 wydesign | 发表于 2008-07-07 17:27 |
| 新手上路 发帖 4 积分 7 | |
|
程序第一次运行的时候一个变量取不到值 @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取不到值,第二次运行时就正常了,是什么问题呢? |
|
| 第2楼 lxmxn | 发表于 2008-07-07 23:05 |
| 版主 发帖 4,938 积分 11,386 | |
|
原因是你的%pos%变量处于if的复合语句体内,需要用到变量延迟。
可以在more +%pos% %2前面加上"Setlocal EnableDelayedExpansion",然后再more +!pos! %2来显示。 具体的内容就请参考set命令的帮助及论坛关于“变量延迟”有关的讨论贴了。 |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |