Board logo

标题: [文件操作] 求助:批处理搜索指定目录的指定后缀名的文件 [打印本页]

作者: StoneYU    时间: 2008-10-15 12:09     标题: 求助:批处理搜索指定目录的指定后缀名的文件

求助:批处理搜索指定目录的指定后缀名的文件并且记录下被复制文件的路径

例如:

搜索指定文件夹“A”的后缀名为“jpg”的所有文件并将其复制到指定文件夹“B”里面,

并且将被复制的后缀名为“jpg”文件原来的路径输出到记事本里面。

注:文件夹“A”里还包含有子文件夹!!!

求各位高手出招了!先谢谢啦!!!
作者: namejm    时间: 2008-10-15 12:22

  1. @echo off
  2. :: 考虑到完整路径可能含有特殊字符,输出的jpg文件路径首尾用引号括起来了
  3. cd.>d:\list.txt
  4. for /f "delims=" %%i in ('dir /a-d /b /s "A\*.jpg" 2^>nul') do (
  5.     copy "%%i" "B">nul&&echo "%%i">>d:\list.txt
  6. )
  7. start d:\list.txt
  8. pause
复制代码

作者: pusofalse    时间: 2008-10-15 13:50

JM好高明啊,考虑问题如此全面。只看echo "%%i"而不看代码解释,愣是觉得""是多余的。赞!
作者: namejm    时间: 2008-10-15 15:53

  犯了一个低级错误,误把 dir /a-d /b /s "A\*.jpg" 写成了 dir /a-d /b /s *.jpg "A",已经修正。
作者: pusofalse    时间: 2008-10-15 16:50     标题: 回复 4楼 的帖子

测试dir /a-d /b /s "A\*.jpg"完全等同于dir /a-d /b /s *.jpg "A",不算错误。
作者: zqz0012005    时间: 2008-10-15 17:21     标题: 回复 5楼 的帖子

NO,可能在这里刚好碰巧相同。
dir /a-d /b /s "A\*.jpg" 是列举当前目录下A文件夹及其所有子目录下的所有jpg文件
dir /a-d /b /s *.jpg "A" 是同时列举当前目录及所有子目录下的所有jpg文件A文件夹及其所有子目录下的所有文件
作者: pusofalse    时间: 2008-10-15 17:50     标题: 回复 6楼 的帖子

谢谢指教,是我肤浅了。
作者: adrien0901    时间: 2008-10-16 11:37

原帖由 namejm 于 2008-10-15 12:22 发表
@echo off
:: 考虑到完整路径可能含有特殊字符,输出的jpg文件路径首尾用引号括起来了
cd.>d:\list.txt
for /f "delims=" %%i in ('dir /a-d /b /s "A\*.jpg" 2^>nul') do (
    copy "%%i" "B">nul&&echo "%%i" ...


能帮忙解释2^>nul含义?
作者: namejm    时间: 2008-10-16 12:14

  若 dir 的结果有出错信息,将屏蔽掉,以免在do之后把这些出错信息作为文件路径加以处理——如果不存在jpg文件,dir 命令将会报错。
作者: adrien0901    时间: 2008-10-16 14:02

原帖由 namejm 于 2008-10-16 12:14 发表
  若 dir 的结果有出错信息,将屏蔽掉,以免在do之后把这些出错信息作为文件路径加以处理——如果不存在jpg文件,dir 命令将会报错。


不需要加转义字符 ^,只需2>nul就行了吧。
作者: Batcher    时间: 2008-10-16 15:02     标题: 回复 10楼 的帖子

你听谁说不需要转义?还是你亲自测试过?




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