标题: [文本处理] [已解决]批处理如何读取目录中所有的子目录 ? [打印本页]
作者: 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等等,这些目录里有两个子目录image、CustomFaceRecv保存着图片信息。我想把这些图片移动到其他地方去,写了上面一个移动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楼 的帖子
- @echo off
- for /f "tokens=4" %%a in ('dir E:\2008传美绿色版\qq /ad') do (
- if exist E:\2008传美绿色版\qq\%%a\image\*.gif md D:\IE临时文件\GIF & move E:\2008传美绿色版\qq\%%a\image\*.gif D:\IE临时文件\GIF
- )
- 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”文件夹的路径,可以按照下面的代码思路继续解决你的问题,当然下面的代码只是一个思路,具体的值根据你机子上的东西,须稍作改变。- @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
复制代码
[ 本帖最后由 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://www.bathome.net/) |
Powered by Discuz! 7.2 |