
BAT怎樣復制子文件夾下所有文件重名文件自動重命名為“文件名1”“文件名2”最后由 86223125 于 -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:圖騰 -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
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
nclick="copycode($('code0'));">復制代碼
重命名重名文件的規則如何改成自動重命名為“文件名1”“文件名2”?請大神賜教!感激不盡!