中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-06 22:57
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 发现&的时间延迟性 查看 840 回复 4
楼 主 发现&的时间延迟性 发表于 2007-12-23 07:39 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
找一个多行(>50000行)的文本文件(假设文件名为test.txt),进入test.txt所在路径,然后命令提示符中输入:
echo 当前时间:%time%>t.txt&findstr /n "." test.txt&echo 当前时间:%time% >>t.txt
经过好一阵子,终于显示时间了,这两个时间竟然一样!
为大家方便测试把测试代码也附上:
@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的时间延迟性:
@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 ]
2 发表于 2007-12-23 20:42 ·  中国 广东 茂名 化州市 电信
中级用户
★★
积分 396
发帖 183
注册 2007-12-23 06:24
18年会员
UID 106531
性别 男
状态 离线
应该是16行呀 每个字符以+1递增 怎么会成8万多行呢 有点想不明白
3 发表于 2007-12-23 22:24 ·  中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
变量延迟的原因!
4 发表于 2007-12-23 23:31 ·  中国 福建 泉州 电信
银牌会员
★★★
积分 1,276
发帖 469
注册 2002-12-23 13:00
23年会员
UID 586
性别 男
来自 福建泉州
状态 离线
Originally posted by jiulong at 2007-12-23 08:42 PM:
应该是16行呀 每个字符以+1递增 怎么会成8万多行呢 有点想不明白

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

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


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

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

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

以下命令.

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


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

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

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
5 发表于 2007-12-24 19:28 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
楼上说的极是,很感谢。
我刚接触批处理,许多东西都是 “知其然,但不知其所以然”,这个论坛很好,学到了许多东西,
论坛跳转: