[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

回复 5楼 的帖子

你会那样写代码是因为你对for还没有理解。打开cmd输入for /?查看里面有一句话,这样写的:
  1. .........
  2. FOR /R [[drive:]path] %variable IN (set) DO command [command-parameters]
  3.     检查以 [drive:]path 为根的目录树,指向每个目录中的
  4.     FOR 语句。.........
复制代码
开关/r虽然遍历目录,但是其实他的作用就是指向每个目录,假设你的D盘一级二级到n级子目录总共是100个目录,那么for /r d: %%a in (....) do 这样一个命令的执行如果你拆开来看的话,其实它就相当于每次跳转到特定的目录下,然后执行一个for %%a in (......) do命令,总共执行100次,只不过for /r把这些跳转隐式化了,明面上看不见,但是效果一样。这样的话再看%%a in (......) do命令,这个命令是for的基本命令格式,再简单不过了,括号中你写的是a.txt对吧,根据for的规则,集合如果没有通配符的话根据do后面的命令解释集合,你这里的a.txt对于for /r %%a in (.....) do 里的echo命令来说就是一个普通字符串,而不是文件。所以整个for /r语句其实相当于在每个文件夹下执行一次“for %%i in (a.txt) do echo %%i是你要查找的文件吗”其实就相当于将a.txt这个字符串显示出来,加之/r的效果,%%i的整个值是“路径+a.txt”的格式,整个这个格式就是一个字符串,比如,你d盘下有目录d:\bat的话,%%i的值就是“d:\bat\a.txt”,这个值都当做字符串,所以你有多少个文件夹就会显示多少次,不管下面有无a.txt这个文本,因为在你的for /r语句里它根本就没被当做文件。要主意的是如果do后面跟的是type之类的命令的话就又不一样了,会将其当做文件。
至于你加一个*之后,那就简单了,有通配符自然for将*a.txt作为文件处理,此时,可以正确显示,但是要知道,从你的结果来看,你的文件夹下一定没有“字符a.txt”的文件,比如ma.txt,ba.txt,如果有的话也会显示出来。
现在理解了吧?

[ 本帖最后由 Lumiere 于 2009-8-1 18:36 编辑 ]
Still with wax

TOP

回复 7楼 的帖子

2楼管理员的代码不就没用if么?
Still with wax

TOP

返回列表