| @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 :eofCOPY |