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

[文件操作] [已解决] 批处理如何提取不同文件夹中文件名部分相同的文件?

我有五个文件夹,每个文件夹内的文件名相似,如:
文件夹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 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

  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. )
复制代码
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

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

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

[ 本帖最后由 liht1024 于 2011-2-23 12:57 编辑 ]

TOP

回复 3楼 的帖子

请把所有需求在顶楼全部更新到顶楼
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

期盼高手继续指教,谢谢!

TOP

随手写的,没有测试。。
  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 编辑 ]
2

评分人数

TOP

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

TOP

返回列表