批处理,复制大量文件时同名文件自动重命名。

有个“目录1” 这个目录里面有个很多子目录,子目录里又包含很多子目录,大概是这样分了3-4层,最后才是我需要的文件,但是这样的文件有很多重名,需要在复制的时候自动重命名,求个这样的批处理。
我找了个朋友写了个批处理,但是只能复制当前目录下的文件,如果当前目录下有很多子目录的话,子目录里的文件将不会复制。我贴出代码。@echo offset num=0
set aa=目录1
set bb=目录2
for /f "delims=" %%i in ('dir /a-d /b %aa%\*.*') do ( if not exist "%bb%\%%i" ( copy "%aa%\%%i" %bb%\>nul ) else call :copy_txt "%aa%\%%i" "%%~ni" %%~xi)goto :eof
:copy_txtset file_n=%2set "file_n=%file_n:~1,-1%"set file_x=%3set /a num+=1if not exist "%bb%\%file_n%%num%%file_x%" ( copy %1 "%bb%\%file_n%%num%%file_x%">nul) else call :copy_txt %1 "%file_n%" %file_x%set num=0goto :eof

::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::功能简介:
::搜索并复制一个或多个磁盘中的某一类型(后缀名)的文件
::搜索并复制某文件夹及其子文件夹下某类文件
::文件将被复制到本bat所在目录下的一新建文件夹中
::自动重命名同名文件,避免覆盖
::自动创建复制清单,记录复制路径,以及重命名文件的原文件名和新文件名
::自动计算复制文件数量,并保存于清单中,清单位于bat所在目录。
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off&setlocal enabledelayedexpansion
title 【类文件提取】       测试环境: Windows XP SP3
SET HardDisK=C D E F G H I J K L M N O P
:str
color !time:~7,1!!time:~9,1!
set OUT=§&set REJ=&set DSK=&set DIS=&cls&set "LJ=%cd%"&echo.
echo ╭⌒╮ ╭ ﹌╮╭ ∽╮ oοО○ ¤ 色彩不理想?按两次ENTER键!
echo ︶︶ (o"."o)(o-.-o) , ︶︶
echo ◤ ̄ ̄~~﹊︸ ̄︸ ̄︸ ̄ ̄◥※※※※※※※※※※※※※※※◣
echo ( ◆ ◆ ————本批处理可用于文件归类存档———— ◆ ◆ )
echo ( ◆ ◆ ◆ ◆ )
echo ( ◆ ◆ 文件将被拷贝到本批处理所在目录下并创建清单 ◆ ◆ )
echo ( ◆ ◆ ◆ ◆ )
echo ( ◆ ◆ —— By:图腾 2011-03-29 ◆ ◆ )
echo ╰◥※※※※※※※※※※◣_______________◢
echo.
for %%i in (%HardDisK%) do (if exist %%i: (set DSK=!DSK! %%i))
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
echo ★当前磁盘 "!DSK! " ——(请输入不需搜索的磁盘盘符)&echo.
echo (例:输入"CEF",即只对C、E、F以外的磁盘进行搜索和复制)&echo.
echo 你可以将目标文件夹拖入本窗口,只在其目录下搜索。。。
echo.&set/p OUT= (拖入文件夹到本窗口后需单击窗口,再按ENTER键确认):&cls
set err=0&set fd=0
if "!OUT!" neq "§" if exist !OUT! (
cd !OUT!||echo 路径不正确,不能包含文件名!&&pause&&goto str
set fd=1&set DIS= !OUT!&goto Suffix)
for %%i in (!DSK!) do (
if /i "!OUT:%%i=!" equ "!OUT!" (set DIS=!DIS! %%i)
if /i "!OUT:%%i=!" neq "!OUT!" (set REJ=!REJ! %%i&set err=1))
if !err!==1 (set REJ=,不搜索盘"!REJ! ") else (set DIS=!DSK!)
:Suffix
color 3f&set SUF=&set err=0&echo.&echo.
if "!DIS!"=="" (color CF&set err=1&set DIS= 没有了,返回吧。。。)
echo 确认搜索对象 "!DIS! " !REJ!&echo.
echo 请输入文件后缀名(如 MP3、TXT、DOC,不区分大小写)&echo.
set/p SUF= ——(不输入内容按ENTER键返回):
if "!SUF!" neq "" set SUF=!SUF: =!
if "!SUF!"=="" (goto str)
if "!err!"=="1" goto str
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
set ch=&set "tme="&set num=0&set "FL=*.!SUF!"
for /f "tokens=1,* delims=. " %%i in ('echo !SUF!') do (
if "%%j"=="" (set "SUF=!SUF:.=!"&set "FL=*.!SUF!" ) else (
echo.&set/p ch=是要搜索文件“!SUF!”吗?(Y/N)[Y]:
if /i "!ch!" neq "n" set "FL=!SUF!"))
if exist File_!SUF! (set ch=&echo.
set/p ch=“File_!SUF!”已存在,是否替换?(Y/N)[Y]:
if /i "!ch!"=="n" (set tim=!time:.=!
set dat=!date:~0,10!&set dat=!dat:-=!
set "tme=_!dat!!tim::=!") else (
rd /s /q File_!SUF! 2>nul
del /q !SUF!_CopyList.TXT 2>nul))
md "!LJ!\File_!SUF!!tme!"&cls
set "FIL=!LJ!\File_!SUF!"&set "LIT=!LJ!\!SUF!_CopyList"
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
if %fd%==0 (
for %%i in (!DIS!) do ( CD/D %%i:&cd\&echo.
echo ◣正在搜索 %%i 盘下 "%SUF%" 文件。。。
echo.&set cot=!num!&call :go)) else ( cd/d !DIS!
echo.&echo ◣正在搜索!DIS!下 "%SUF%" 文件。。。
echo.&set cot=!num!&call :go)
set ovr=!SUF!文件总数:!num! 日期:%date% %time:~0,8%
(echo.&echo ——%ovr%)>>"!LIT!!tme!.TXT"
if !num!==0 ( rd /s /q "!FIL!!tme!" 2>nul
del /q "!LIT!!tme!.TXT" 2>nul
echo.&echo 无此类型文件!&echo.)
color 31&echo.
if !num! neq 0 (echo 已复制到:"!FIL!!tme!"
echo 复制清单:"!LIT!!tme!.TXT"&echo.)
echo 复制文件总数:!num!,按任意键返回...
pause>nul&cls&cd/d !LJ!&goto Suffix
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::非清单文件?>>拷贝路径为不为存放路径?>>重名?[重命名预设]>>提取
:go
for /f "delims=" %%j in ('dir /a /s /b !FL!') do (
set "lst=%%~nxj"&set "cpf=%%~dpj"
if "!lst:_CopyList=!"=="!lst!" (
if "!cpf:File_=!"=="!cpf!" (
set rne=&set rea=&set rna=★
if exist "!FIL!!tme!\%%~nxj" (
set tim=!time:.=!&set tim=!tim::=!
set rna=☆&set rea= ★重命名:"%%~nj-☆!tim!%%~xj"
set "rne=\%%~nj-★!tim!%%~xj")
COPY /y "%%j" "!FIL!!tme!!rne!" >nul
echo !rna!已复制:"%%j"&set/a num+=1
echo !rna!"%%j"!rea!>>"!LIT!!tme!.TXT")))
set/a cot=!num!-!cot!
echo.&echo %cd%目录下复制!SUF!文件数:!cot! "☆"表示已重命名文件
echo ==============================================================
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-09
如此改试一下:echo offset num=0
set aa=目录1
set bb=目录2
for /f "delims=" %%i in ('dir /s /a-d /b %aa%\*.*') do ( if not exist "%bb%\%%i" ( copy "%%~fi" %bb%\>nul ) else call :copy_txt "%%~fi" "%%~ni" %%~xi)goto :eof
:copy_txtset file_n=%2set "file_n=%file_n:~1,-1%"set file_x=%3set /a num+=1if not exist "%bb%\%file_n%%num%%file_x%" ( copy %1 "%bb%\%file_n%%num%%file_x%">nul) else call :copy_txt %1 "%file_n%" %file_x%set num=0goto :eof

批处理,复制大量文件时同名文件自动重命名。
::文件将被复制到本bat所在目录下的一新建文件夹中 ::自动重命名同名文件,避免覆盖 ::自动创建复制清单,记录复制路径,以及重命名文件的原文件名和新文件名 ::自动计算复制文件数量,并保存于清单中,清单位于bat所在目录。:::echo off&setlocal enabledelayedexpansion title 【类文件提取】     ...

批处理bat ,复制多个文件时处理重名文件
echo off & title 拷贝文件,同名时重命名 By 依梦琴瑶::设置文件列表名set List=file.txt::设置文件备份保存路径,当前目录请设一个英文小数点set SavDir=.for \/f "delims=" do ('type "%List%"') do ( if exist "%SavDir%\\%%~nxa" ( call :RenameFile "%%~a" ) else (...

批量复制文件到同名文件夹下,如果有重名的自动重命名
1、首先复制第一个文件到此文件夹。2、复制第二个文件到此文件夹,系统会自动给出提示,如图:3、选择“复制,但保留这两个文件”。则第二个被复制过去的文件自动被系统命名为“文件名(2)”以示与第一个文件的区别。4、同理,复制同文件名的第三个文件,第四个文件等等,都会自动重命名为“文...

批处理复制文件时同名文件跳过并重命名.
1、E盘备份文件命名问题,建议采用以当前日期,时间为文件名。2、自动行你可以批处理命令加入启动项,或者添加WINDOWS任务计划运行。echo off if exist e:\\micr\\filename_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.bak goto existfile goto backupfile :backupf...

批处理 批量复制,遇到同名文件自动重命名。
批处理文件的扩展名为bat 。目前比较常见的批处理包含两类:DOS批处理和PS批处理。PS批处理是基于强大的图片编辑软件Photoshop的,用来批量处理图片的脚本;而DOS批处理则是基于DOS命令的,用来自动地批量地执行DOS命令以实现特定操作的脚本。更复杂的情况,需要使用if、for、goto等命令控制程式的运行过程,...

批量复制相同文件名的文件到一个文件夹里面自动重命名
用批处理 echo off&setlocal enabledelayedexpansion&for \/f "delims="a in ('dir \/s\/b .*')do set\/a a+=1&echo f|xcopy \/e \/y "%%a""D:\\new(!a!).*"这是当前文件夹(包括子文件夹)复制到D盘下,重命名为new(数字).后缀 复制到哪里你可以自己修改一下路径!那个"!a!"你可以不用...

批处理复制文件至指定文件夹,并自动重命名。
4、在CMD窗口中,用dir命令查询所有符合条件的文件夹,并将显示结果重定向输出到当前文件下的rename.txt中。注意dir命令、带通配符的文件名192.*与重定向输出>rename.txt之间有空格。5、CMD窗口中命令提示符后输入rename.bat,回车,执行批处理文件。6、批量文件夹重命名完成。

批处理复制文件至指定文件夹并自动重命名
在Windows环境下,可以使用批处理脚本来实现文件的复制与自动重命名。以下是一个简单的批处理脚本示例,该脚本将指定文件夹(例如`C:\\SourceFolder`)中的所有文件复制到另一个文件夹(例如`C:\\DestinationFolder`),并在复制过程中自动为每个文件添加前缀(如`Copy_`)进行重命名,以避免名称冲突。```...

批处理复制多个同名文件夹并重命名
copy 盘符:\\文件路径及文件名 盘符:\\路径 ren 盘符:\\文件名 新文件名

如何用批处理将同一个文件复制程多个文件,且命名自动递增1
echo offsetlocal enabledelayedexpansionfor \/l %%i in (1001,1,1100) do (set x=%%i© \/y "%~1" "%~dpn1!x:~-3!%~x1">nul)另存为1.bat,拖动test文件到1.bat的图标上即可。

相似回答