复制代码
- @echo off
- :: code by namejm bbs.bathome.net CMD@XP_SP2 2008.8.4
- color 1f
- mode con lines=30
- set TT=文件分类整理器
- rem ======= 设置选项 =======
- :set_source
- cls
- title %TT%-当前目录:"%cd%"
- echo.&echo.
- call :note
- echo.&echo.
- echo 请把要处理的文件夹拉到本窗口(直接回车将处理当前目录):
- echo.
- set "source=%cd%"
- set /p source=
- if defined source (
- set "source=%source:"=%"
- ) else goto set_source
- if "%source%"=="1" goto set_source
- if "%source%"=="0" exit
- if exist "%source%" (
- pushd "%source%" 2>nul && popd || goto set_source
- )
- :set_destination
- title %TT%-源文件路径:"%source%"
- cls
- call :note
- echo.
- echo 请输入保存位置的绝对或相对路径,或把目的文件夹拖到本窗口
- echo.
- echo 直接回车将处理当前目录;
- echo.
- echo 若目的路径从属于或等同于源路径,或存在同名的非文件夹路径
- echo. 则必须重新选择:
- echo.
- set destination=
- set /p destination=
- if defined destination set "destination=%destination:"=%"
- if defined destination (
- if "%destination%"=="1" goto set_source
- if "%destination%"=="0" exit
- ) else goto set_destination
- echo "%destination%"|findstr ":" || (
- set "destination=%cd%\%destination%"
- )
- :: 检测是否存在同名的非文件夹路径
- if exist "%destination%" (
- pushd "%destination%" 2>nul && popd || goto set_destination
- )
- :: 判断目的路径是否从属于或等同于源路径
- set flag=
- call set "flag=%%destination:%source%=%%"
- if not defined flag goto set_destination
- if "%flag:~0,1%"=="\" goto set_destination
- md "%destination%" 2>nul
- :set_type
- title %TT%-目的路径:"%destination%"
- cls
- echo.&echo.
- call :note
- echo.
- echo 请输入要处理的文件类型,多个类型以空格分隔
- echo.
- echo (如:rar exe,直接回车将处理所有类型):
- echo.
- set type=
- set /p type=
- if defined type (
- if "%type%"=="1" goto set_destination
- if "%type%"=="0" exit
- for %%i in (%type%) do set /p type=*.%%i <nul>nul
- ) else set type=*.*
- rem ======= 按文件类型复制文件 =======
- cd /d "%source%"
- for /f "delims=" %%i in ('dir /a-d /b /s %type% 2^>nul') do (
- title %TT%-正在处理 "%%i"
- set "file_souce=%%i"
- set "file_destination=%destination%\%%~xi文件\%%~nxi"
- md "%destination%\%%~xi文件" 2>nul
- if not exist "%destination%\%%~xi文件\%%~nxi" (
- copy "%%i" "%destination%\%%~xi文件">nul
- ) else (
- set num=0
- call :rename "%%i" "%destination%\%%~xi文件\%%~ni" "%%~xi"
- )
- )
- exit
- rem ======= 重命名同名文件 =======
- :rename
- set /a num+=1
- set "file_source=%~1"
- set "file_destination=%~2_%num%%~3"
- if not exist "%file_destination%" (
- copy "%file_source%" "%file_destination%">nul
- ) else goto rename
- goto :eof
- :note
- echo ╭────────╮
- echo ╭─────────┤ 功 能 说 明 ├─────────╮
- echo │ ╰────────╯ │
- echo │ │
- echo │ 本程序能对当前目录及其所有子目录下的文件进行 │
- echo │ │
- echo │ 归类,具体效果如下: │
- echo │ │
- echo │ 在指定目录下,以指定的文件类型名为文件夹名 │
- echo │ │
- echo │ 建立形如 .exe文件、.rar文件 之类的文件夹,不同 │
- echo │ │
- echo │ 类型的文件复制到对应的文件夹下,并自动重命名同 │
- echo │ │
- echo │ 名文件:如有重名,则直接在文件名后加"_序号"。 │
- echo │ │
- echo ╰────────────────────────────╯
- echo.
- echo 返回上一步请按 1 退出请按 0
- echo. ─────────────────────────────
- goto :eof
欢迎光临 批处理之家 (http://bbs.bathome.net/) | Powered by Discuz! 7.2 |