Board logo

标题: 程序第一次运行的时候一个变量取不到值 [打印本页]

作者: wydesign     时间: 2008-7-7 17:27    标题: 程序第一次运行的时候一个变量取不到值

@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取不到值,第二次运行时就正常了,是什么问题呢?
作者: lxmxn     时间: 2008-7-7 23:05
原因是你的%pos%变量处于if的复合语句体内,需要用到变量延迟。

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

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