标题: [文件操作] BAT怎样复制子文件夹下所有文件,重名文件自动重命名为“文件名1”“文件名2”? [打印本页]
作者: 86223125 时间: 2013-11-6 14:07 标题: BAT怎样复制子文件夹下所有文件,重名文件自动重命名为“文件名1”“文件名2”?
本帖最后由 86223125 于 2013-11-6 14:30 编辑
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::功能简介:
- ::搜索并复制一个或多个磁盘中的某一类型(后缀名)的文件
- ::搜索并复制某文件夹及其子文件夹下某类文件
- ::文件将被复制到本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”“文件名2”?请大神赐教!感激不尽!
作者: DAIC 时间: 2013-11-6 17:20
先整理一下格式,改天有时间的话再改代码。复制代码
作者: 86223125 时间: 2013-11-6 19:51
回复 2# DAIC
坐等大神回复!
作者: 86223125 时间: 2013-11-14 14:56
大神去哪了?
作者: foxJL 时间: 2013-11-14 17:16
楼主有什么问题,直接把需求写出来吧,写代码比改别人的代码更轻松。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |