Board logo

标题: 发现&的时间延迟性 [打印本页]

作者: plp626     时间: 2007-12-23 07:39    标题: 发现&的时间延迟性

找一个多行(>50000行)的文本文件(假设文件名为test.txt),进入test.txt所在路径,然后命令提示符中输入:

echo 当前时间:%time%>t.txt&findstr /n "." test.txt&echo 当前时间:%time% >>t.txt

经过好一阵子,终于显示时间了,这两个时间竟然一样!
为大家方便测试把测试代码也附上:

  Quote:
@echo off&color a
echo echo 1234567890^>test.txt>生成大文本文件.bat
echo for /l %%%%i in (1 1 16) do type test.txt^>^>test.txt>>生成大文本文件.bat
call 生成大文本文件.bat
echo 文本文件test.txt(大约8万多行)已经生成,
echo 按任意键测试findstr /n "." test.txt的执行时间. &pause>nul

echo 当前时间:%time%>t.txt&findstr /n "." test.txt&echo 当前时间:%time% >>t.txt

echo.&type t.txt&pause

下面将

echo 当前时间:%time%>t.txt&findstr /n "." test.txt&echo 当前时间:%time% >>t.txt

分三行逐步实现,大家可以再测试以下,便可理解&对time的时间延迟性:

  Quote:
@echo off&color a
echo echo 1234567890^>test.txt>生成大文本文件.bat
echo for /l %%%%i in (1 1 16) do type test.txt^>^>test.txt>>生成大文本文件.bat
call 生成大文本文件.bat
echo 文本文件test.txt(大约8万多行)已经生成,
echo 按任意键测试findstr /n "." test.txt的执行时间. &pause>nul

echo 当前时间:%time%>t.txt
findstr /n "." test.txt
echo 当前时间:%time% >>t.txt


echo.&type t.txt&pause

产生这一现象的原因???



[ Last edited by plp626 on 2007-12-23 at 08:55 AM ]
作者: jiulong     时间: 2007-12-23 20:42
应该是16行呀 每个字符以+1递增   怎么会成8万多行呢  有点想不明白
作者: lxmxn     时间: 2007-12-23 22:24
变量延迟的原因!
作者: chenall     时间: 2007-12-23 23:31


  Quote:
Originally posted by jiulong at 2007-12-23 08:42 PM:
应该是16行呀 每个字符以+1递增   怎么会成8万多行呢  有点想不明白

你可以回头试下就知道了.
依次执行如下命令.看看结果,应该可以明白为什么了

  Quote:
1.echo.a>test.txt
2.type test.txt>>test.txt
3.notepad test.txt
看看test.txt有几行了.
然后重复2和3
重复2和3 16次后,看看结果

回楼主,
DOS命令在执行之前时就已经将%%里面替换掉了(一条一条执行的).
所以.以下命令,

  Quote:
echo.%time%&执行其它命令&echo.%time%

执行结果两个时间是一样的.因为这只算是一条.

以下命令.

  Quote:
echo 当前时间:%time%>t.txt
findstr /n "." test.txt
echo 当前时间:%time% >>t.txt

时间当然就不一样了.
因为执行第二句时,需要许多时间(如果这一句所需的时间很短则看不出效果).
到执行第三句时时间就是执行时间.

论坛里面之前就有介绍过.
通过以下例子或许可以明白

  Quote:
set a=1
echo.执行前:%a%&set/aa+=1 >nul&echo.结果:%a%
echo.现在值:%a%

其中第一句设一个变量A=1
第二句,
显示A的值然后将A的值+1再显示A的值.
由于是同一个语句所以,值是一样的.
echo.执行前:%a%&set/aa+=1 >nul&echo.结果:%a%
执行时是先将%a%替换成1然后再执行的
第三句.再显示A的值
作者: plp626     时间: 2007-12-24 19:28
楼上说的极是,很感谢。
我刚接触批处理,许多东西都是 “知其然,但不知其所以然”,这个论坛很好,学到了许多东西,