Board logo

标题: [文本处理] [已解决]批处理如何读取目录中所有的子目录 ? [打印本页]

作者: cuncunningxue    时间: 2009-6-15 10:19     标题: [已解决]批处理如何读取目录中所有的子目录 ?


如何读取目录中所有的子目录

for /f %%i in ("dir E:\2008传美绿色版\qq /ad") do (
if exist E:\2008传美绿色版\qq\%%i\image\*.GIF move %%i\image\*.GIF "D:\IE临时文件\GIF"
)
Pause

我的QQ安装在E:\2008传美绿色版\qq,里边每一个号码都有一个目录,比如:254136487等等,这些目录里有两个子目录imageCustomFaceRecv保存着图片信息。我想把这些图片移动到其他地方去,写了上面一个移动QQ里边照片批处理,但是不能使用。
   这个批处理的意思先用("dir E:\2008传美绿色版\qq /ad"),读取所有的QQ里边子目录名,然后使用if语句运行,可惜不能用,不知道那里出了问题。那个朋友帮帮我,解决这个问题。


[ 本帖最后由 cuncunningxue 于 2009-6-18 02:12 编辑 ]
作者: zhao3    时间: 2009-6-15 14:23

tree>abc.txt
文件目录即输出到abc.txt
列出指定目录下所有的文件和目录:
tree/f>abc.txt
作者: cuncunningxue    时间: 2009-6-15 15:57     标题: 回复 2楼 的帖子

列出指定目录下所有的文件和目录后,然后怎么办?
能不能说详细一点.
作者: keen    时间: 2009-6-15 16:32     标题: 回复 1楼 的帖子

  1. @echo off
  2. for /f "tokens=4" %%a in ('dir E:\2008传美绿色版\qq /ad') do (
  3.     if exist E:\2008传美绿色版\qq\%%a\image\*.gif md D:\IE临时文件\GIF & move E:\2008传美绿色版\qq\%%a\image\*.gif D:\IE临时文件\GIF
  4. )
  5. pause
复制代码
你的"D:\IE临时文件\GIF"文件夹存在的话,就可以把代码中的"md D:\IE临时文件\GIF &"去掉!
作者: cuncunningxue    时间: 2009-6-16 10:34     标题: 回复 4楼 的帖子

还是不能用啊,我照着你说做.
不知道那里出了问题,不过我还得谢谢你
作者: keen    时间: 2009-6-16 19:26     标题: 回复 5楼 的帖子

请把出现的错误现象描述一下,要不,谁也帮不了你!
作者: cuncunningxue    时间: 2009-6-16 19:42     标题: 回复 6楼 的帖子

我按照你写的批处理,可是运行了什么也没反应.有人这样教我:
检索目录的同时 就 可以用 传递符 把结果 传递给 find 去查找关键字 "image"了
找到了就把这个路径赋值变量
剩下的你应该没问题了吧? 如果有问题 可以再提出来。



for /f "delims=" %%1 in ('dir /a:d /s /b d:\已安装程序\qq2008^| find /i "image"')do set wind=%%1

可是这个我不理解,也不会用.
作者: keen    时间: 2009-6-16 20:04     标题: 回复 7楼 的帖子

我的4楼的代码,只是移动.gif为后缀名格式的图片,如果你的E:\2008传美绿色版\qq\用户qq\image路径下没有.gif格式的文件,当然会没有什么反应。

我4楼的代码只是对你顶楼的代码改正正确而已。具体情况你要自己修改代码中的一些值。

你7楼所说的那一句代码,是查找“image”文件夹的路径,可以按照下面的代码思路继续解决你的问题,当然下面的代码只是一个思路,具体的值根据你机子上的东西,须稍作改变。
  1. @echo off&setlocal enabledelayedexpansion
  2. md d:\IE临时文件\GIF 2>nul
  3. for /f "delims=" %%1 in ('dir /a:d /s /b d:\已安装程序\qq2008^| find /i "image"')do (
  4.     set "wind=%%1"
  5.     move "!wind!"\* d:\IE临时文件\GIF
  6. )
  7. pause
复制代码

[ 本帖最后由 keen 于 2009-6-16 20:26 编辑 ]
作者: cuncunningxue    时间: 2009-6-16 22:25

@echo off&setlocal enabledelayedexpansion
md d:\IE临时文件\GIF 2>nul
for /f "delims=" %%1 in ('dir /a:d /s /b d:\已安装程序\qq2008^| find /i "image"')do (
    set "wind=%%1"
    move "!wind!"\* d:\IE临时文件\GIF
)
pause

你这个批处理成功了,太谢谢你了.就是我还不明白,要是能解释一下,就更完美了.

)do 这个地方为什么没有空格, ^| find /i "image" 这个是干什么的,也不明白.

千言万语汇成两个字:  谢谢 !
作者: cuncunningxue    时间: 2009-6-16 22:39     标题: 回复 8楼 的帖子

这里边就搜索一个文件目录 image ,要是有两个目录 image 和 CustomFaceRecv ,这个批处理能办到吗?

setlocal enabledelayedexpansion 这个很难理解,尽管网络上有解释,但是我还是不明白
作者: keen    时间: 2009-6-16 22:42     标题: 回复 9楼 的帖子

)do 应该有空格,我的笔误,感谢指正。

|是管道符,是把前面的命令(这里是dir)输出值传递到后面,成为后面命令(这里是find)的输入值。
^这个是转义字符,因为批处理有预处理机制,所以单独在for命令中写|,CMD会无法认识,就会报错,加上转义字符^,就正确执行。

find /i "image"就是寻找字符串“image”, /i 参数就是不区分大小写。
作者: keen    时间: 2009-6-16 23:02     标题: 回复 10楼 的帖子

可以同时寻找两个文件夹,但必须把代码中的代码稍作改动,改动如下:
find /i "image" 改为findstr "image\ CustomFaceRecv\"

学习setlocal enabledelayedexpansion 请在本论坛搜索“延迟”

[ 本帖最后由 keen 于 2009-6-16 23:04 编辑 ]
作者: cuncunningxue    时间: 2009-6-17 06:33

可以同时寻找两个文件夹,但必须把代码中的代码稍作改动,改动如下:
find /i "image" 改为findstr "image\ CustomFaceRecv\"

这个我测试了,不能用的,说是不能运行的命令.不知道有没有其他的办法,因为这个太重要了.
一个QQ里边就有 image\ CustomFaceRecv 这两个目录,存储有图片信息.
作者: keen    时间: 2009-6-17 12:51     标题: 回复 13楼 的帖子

find /i "image"改成findstr "image CustomFaceRecv"
再试试。
作者: cuncunningxue    时间: 2009-6-17 12:59

测试成功,谢谢你.一切ok
作者: keen    时间: 2009-6-17 13:07

问题解决。请在标题前面添加【已解决】字样!
作者: cuncunningxue    时间: 2009-6-17 17:13     标题: 回复 14楼 的帖子[已解决]

已经解决了!

感谢keen巡查的大力帮助




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2