Board logo

标题: [文件操作] [已解决] 批处理如何提取不同文件夹中文件名部分相同的文件? [打印本页]

作者: liht1024    时间: 2011-2-22 16:25     标题: [已解决] 批处理如何提取不同文件夹中文件名部分相同的文件?

我有五个文件夹,每个文件夹内的文件名相似,如:
文件夹1:Acalypha_australis_I_Z979,Acer_davidii_I_Z72,Acer_fabri_I_Z88,Achnatherum_inebrians_I_Z1097,Actinidia_chinensis_I_Z42,Adenostemma_lavenia_I_Z476,......;
文件夹2:Acalypha_australis_K_Z979,Acer_davidii_K_Z72,Achnatherum_inebrians_K_Z1097,Actinidia_chinensis_K_Z42,Adenostemma_lavenia_K_Z476, ......;
文件夹3:Acer_davidii_P_Z72,Acer_fabri_P_Z88,Achnatherum_inebrians_P_Z1097,Actinidia_chinensis_P_Z42,Adenostemma_lavenia_P_Z476;
文件夹4:Acalypha_australis_H_Z979,Acer_davidii_H_Z72,Acer_fabri_H_Z88,Achnatherum_inebrians_H_Z1097,Actinidia_chinensis_H_Z42,......;
文件夹5:Acalypha_australis_L_Z979,Acer_davidii_L_Z72,Acer_fabri_L_Z88,Achnatherum_inebrians_L_Z1097,Actinidia_chinensis_L_Z42,Adenostemma_lavenia_L_Z476,......;
请求一批处理程序:忽略每个文件中的_I_,_K_,_P_,_H_或_L_后,只复制在所有文件夹内都有的同名文件,复制后的结果放到一个新文件夹内。
本人为新手,也没有积分能给,还望各位高手帮忙,谢谢。

[ 本帖最后由 liht1024 于 2011-2-24 13:34 编辑 ]
作者: hanyeguxing    时间: 2011-2-22 20:39

  1. @echo off&setlocal enabledelayedexpansion
  2. set "d=目标目录"
  3. for /d %%a in (*) do if /i not "%%a"=="%d%" for %%b in ("%%~fa\*.txt") do for /f "tokens=1-3* delims=_" %%c in ("%%~nb") do (
  4. set e=%~dp0%d%\%%c_%%d_%%f
  5. if not exist "!e!" md "!e!"
  6. copy "%%b" "!e!"
  7. )
复制代码

作者: liht1024    时间: 2011-2-23 09:10

非常感谢寒夜孤星,已经成功了。不过又有一个新的要求,已经更新在顶楼,谢谢。

(就是忽略每个文件中的_I_,_K_,_P_,_H_或_L_后,是否可以只复制在五个文件夹内都有的同名文件,复制后的结果放到一个文件夹内就可以)

[ 本帖最后由 liht1024 于 2011-2-23 12:57 编辑 ]
作者: Batcher    时间: 2011-2-23 12:42     标题: 回复 3楼 的帖子

请把所有需求在顶楼全部更新到顶楼
作者: liht1024    时间: 2011-2-24 08:21

期盼高手继续指教,谢谢!
作者: caruko    时间: 2011-2-24 12:35

随手写的,没有测试。。
  1. @echo off&setlocal enabledelayedexpansion
  2. ::目标目录填入5个,无须带引号,如果搜索的文件名都是同一个后缀如JPG,把dir /s /b *_*_*_*改成 dir /s /b *_*_*_*.jpg 会更好。
  3. set "d1=path1"
  4. set "d2=path2"
  5. set "d3=path3"
  6. set "d4=path4"
  7. set "d5=path5"
  8. for /l %%D in (1,1,5) do (
  9.         pushd !d%%D!
  10.         for /f "delims=*" %%x in ('dir /s /b *_*_*_*') do (
  11.                   for /f "tokens=1,2,4 delims=_" %%i in ("%%~nx") do (
  12.                                 if defined _%%i_%%j_%%k (
  13.                                              set /a n=!_%%i_%%j_%%k:~0,1!+1
  14.                                              set "_%%i_%%j_%%k=!n!!_%%i_%%j_%%k:~1!,%%x"
  15.                                 ) else (
  16.                                              set "_%%i_%%j_%%k=1,%%x"
  17.                                )
  18.                     )
  19.          )
  20.         popd
  21. )
  22. set newfile=d:\newfile
  23. mkdir !newfile!
  24. for /f "tokens=2-7 delims=,=" %%a in ('set _') do (
  25.         if %%a equ 5 (
  26.                 copy "%%b" "!newfile!\%%~nxb" /y
  27.                 copy "%%c" "!newfile!\%%~nxc" /y
  28.                 copy "%%d" "!newfile!\%%~nxd" /y
  29.                 copy "%%e" "!newfile!\%%~nxe" /y
  30.                 copy "%%f"  "!newfile!\%%~nxf" /y
  31.         )
  32. )
  33. start "!newfile!"
  34. pause>nul
复制代码

[ 本帖最后由 caruko 于 2011-2-24 12:45 编辑 ]
作者: liht1024    时间: 2011-2-24 13:33

非常感谢caruko、寒夜孤星的慷慨指教,已经成功了,谢谢[url=index.php]批处理之家[/url]!




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