中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-09 03:13
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 程序第一次运行的时候一个变量取不到值 查看 720 回复 1
楼 主 程序第一次运行的时候一个变量取不到值 发表于 2008-07-07 17:27 ·  中国 重庆 大足区 电信
新手上路
积分 7
发帖 4
注册 2007-11-06 15:18
18年会员
UID 101878
性别 男
状态 离线
@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 发表于 2008-07-07 23:05 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
原因是你的%pos%变量处于if的复合语句体内,需要用到变量延迟。

可以在more +%pos% %2前面加上"Setlocal EnableDelayedExpansion",然后再more +!pos! %2来显示。

具体的内容就请参考set命令的帮助及论坛关于“变量延迟”有关的讨论贴了。
论坛跳转: