标题: [文件操作] [已解决] 批处理如何提取不同文件夹中文件名部分相同的文件? [打印本页]
作者: 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
- @echo off&setlocal enabledelayedexpansion
- set "d=目标目录"
- 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 (
- set e=%~dp0%d%\%%c_%%d_%%f
- if not exist "!e!" md "!e!"
- copy "%%b" "!e!"
- )
复制代码
作者: 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
随手写的,没有测试。。- @echo off&setlocal enabledelayedexpansion
- ::目标目录填入5个,无须带引号,如果搜索的文件名都是同一个后缀如JPG,把dir /s /b *_*_*_*改成 dir /s /b *_*_*_*.jpg 会更好。
- set "d1=path1"
- set "d2=path2"
- set "d3=path3"
- set "d4=path4"
- set "d5=path5"
- for /l %%D in (1,1,5) do (
- pushd !d%%D!
- for /f "delims=*" %%x in ('dir /s /b *_*_*_*') do (
- for /f "tokens=1,2,4 delims=_" %%i in ("%%~nx") do (
- if defined _%%i_%%j_%%k (
- set /a n=!_%%i_%%j_%%k:~0,1!+1
- set "_%%i_%%j_%%k=!n!!_%%i_%%j_%%k:~1!,%%x"
- ) else (
- set "_%%i_%%j_%%k=1,%%x"
- )
- )
- )
- popd
- )
- set newfile=d:\newfile
- mkdir !newfile!
- for /f "tokens=2-7 delims=,=" %%a in ('set _') do (
- if %%a equ 5 (
- copy "%%b" "!newfile!\%%~nxb" /y
- copy "%%c" "!newfile!\%%~nxc" /y
- copy "%%d" "!newfile!\%%~nxd" /y
- copy "%%e" "!newfile!\%%~nxe" /y
- copy "%%f" "!newfile!\%%~nxf" /y
- )
- )
- start "!newfile!"
- 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 |