中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 发现&的时间延迟性 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  发现&的时间延迟性

找一个多行(>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 ]

2007-12-23 07:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
jiulong
中级用户




积分 396
发帖 183
注册 2007-12-23
状态 离线
『第 2 楼』:  

应该是16行呀 每个字符以+1递增   怎么会成8万多行呢  有点想不明白

2007-12-23 20:42
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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

变量延迟的原因!

2007-12-23 22:24
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
chenall
银牌会员




积分 1276
发帖 469
注册 2002-12-23
来自 福建泉州
状态 离线
『第 4 楼』:  



  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的值

   此帖被 +1 点积分    点击查看详情   
评分人:【 plp626 分数: +1  时间:2007-12-24 19:34




QQ:366840202
http://chenall.net
2007-12-23 23:31
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (366840202)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 5 楼』:  

楼上说的极是,很感谢。
我刚接触批处理,许多东西都是 “知其然,但不知其所以然”,这个论坛很好,学到了许多东西,

2007-12-24 19:28
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: