[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
8楼的代码比较易于观察,观察后发现:
每一个ping的延时之后都生成一个文件,所以FOR /l是每循环一次就创建一个文件

TOP

本帖最后由 mxxcgzxxx 于 2011-5-17 19:45 编辑

你试下创建1000个文件的FOR,并每次显示一下%%1,会发现在数完前,并没有文件生成,所以应该是FOR创建文件的问题吧!
  1. for /l %%1 in (1,1,1000) do echo %%1&cd.>%%1.txt
复制代码
原理应该和FOR中的GOTO是一样的道理。循环结束后才执行循环中的有效任务
世界上没有学不会的知识,也没有想得到却做不到的事!

TOP

9楼发的是什么?

TOP

对,不同批的存在区别。
另外:
  1. @echo off
  2. for /l %%i in (1,1,300) do (
  3. ping -n 1 127.1>nul
  4. cd.>%%i.txt
  5. )
  6. dir /a-d /b /od *.txt
  7. pause
复制代码
这次执行后,dir的顺序完全变成正常顺序。
再另外:
6楼的结果是win7下的测试结果,300个文件的排序只有微小的差别,而不是像楼主的截图一样有巨大的差别。难道dir的排序与操作系统有关?或者与电脑的快慢有关?

TOP

6# michael8111

两次dir中的txt是同一批的吗?我用5楼的代码试验,同批次的没有区别,不同批的则存在区别

TOP

本帖最后由 michael8111 于 2011-5-17 19:33 编辑

楼上:经过测试,两次dir的结果确实是不同的。我只截取一段以证明:
第一次:
  1. 1.txt
  2. 2.txt
  3. 6.txt
  4. 5.txt
  5. 4.txt
  6. 7.txt
  7. 3.txt
  8. 8.txt
  9. 12.txt
  10. 13.txt
  11. 10.txt
  12. 9.txt
  13. 11.txt
  14. 15.txt
  15. 16.txt
复制代码
第二次:
  1. 1.txt
  2. 3.txt
  3. 4.txt
  4. 5.txt
  5. 6.txt
  6. 2.txt
  7. 7.txt
  8. 11.txt
  9. 10.txt
  10. 12.txt
  11. 8.txt
  12. 9.txt
  13. 17.txt
  14. 14.txt
  15. 18.txt
复制代码
那么,每一次创建300个文件的代码都是一样的,而结果却不同。dir的排序究竟遵循什么规律?这个有待于发现。

TOP

而且,这个顺序似乎在创建时就注定了的
  1. @echo off
  2. for /l %%i in (1,1,300) do cd.>%%i.txt
  3. dir /a-d /b /od *.txt>tmp1
  4. dir /a-d /b /od *.txt>tmp2
  5. fc tmp1 tmp2
  6. pause
复制代码
  1. @echo off
  2. for /l %%i in (1,1,300) do cd.>%%i.txt
  3. dir /a-d /b /od *.txt>tmp1
  4. for /l %%i in (1,1,300) do cd.>%%i.txt
  5. dir /a-d /b /od *.txt>tmp2
  6. fc tmp1 tmp2
  7. pause
复制代码

TOP

本帖最后由 zm900612 于 2011-5-17 19:21 编辑

复杂,占位思考

虽说是同一秒内创建,但是它的排序总应该遵循什么规律吧,要不然两次dir的结果将是不同的

TOP

楼上正解。

TOP

  1. for /l %%i in (1,1,300) do cd.>%%i.txt
复制代码
这个命令的运行只需要大约3秒钟,也就是说,平均每秒钟100个文件。
dir /od的时间判断可能没有这么精确(精确到0.01秒),所以就出现了如图情况(图上的文件名均小于100,而这些文件都是同一秒创建的)

TOP

返回列表