| @echo off&setlocal enabledelayedexpansion |
| echo; |
| for /f "tokens=1* delims==" %%a in ('"ftype winrar||echo error"') do ( |
| if %%a==error ( |
| echo; |
| echo 因 rar 格式未与 Winrar 关联,故无法获取 WinRar 安装位置。 |
| echo;&pause&exit |
| ) else path %%~dpb;%path% |
| ) |
| set d= |
| for /l %%a in (1 2 28) do set d=!d!== |
| cd /d "%~dp1" |
| echo !d:~3!将被整理的文件!d:~3! |
| if "%~1" neq "" (for %%a in (%*) do if /i %%~xa==.rar echo %%a) else dir /b *.rar |
| echo !d!========!d! |
| |
| echo; |
| echo 本脚本用于批量整理压缩分卷,自动将压缩分卷按卷号重新命名,暂不支持同时对来自不同压缩包的分卷进行区分。 |
| echo; |
| echo 现在请为改名后的 rar 指定一个文件名,如拖入一个文件到窗口则取其文件名。直接回车则以找到的第一个压缩分卷为名。 |
| :again |
| echo; |
| set name= |
| set /p name=输入: |
| for /f "delims=" %%a in ("!name!") do set name=%%~nxa |
| for /f tokens^=2delims^=\/:*?^"^<^>^| %%a in ("[!name!]") do ( |
| echo 输入有误,文件名不能含有 \ / : * ? " < > | 等字符。 |
| goto again |
| ) |
| |
| set error= |
| if "%~1" neq "" ( |
| ren *.$rar$ *.rar 2>nul |
| for %%a in (%*) do if /i %%~xa==.rar ren "%%~a" *.$rar$ |
| ) else ren *.rar *.$rar$ |
| |
| for /f "tokens=1*" %%a in ('rar v *.$rar$^|findstr /rc:"^卷" /c:"卷 [0-9]*$"') do ( |
| set /a n=^^!n |
| if !n!==1 ( |
| set "file=%%~nb" |
| |
| ) else ( |
| for /f "tokens=5" %%c in ("%%b") do ( |
| set /a num=%%c+1000 |
| if not defined name if !num!==1001 set name=!file! |
| ) |
| |
| for %%c in (!num:~-3!) do ( |
| if defined part%%c set error=1 |
| set part%%c="!file!.rar" !part%%c! |
| ) |
| |
| ) |
| ) |
| echo; |
| echo !d!文件列表!d! |
| set part |
| echo !d!========!d! |
| echo; |
| |
| ren *.$rar$ *.rar |
| if defined error ( |
| echo Error:以下文件的卷号重复: |
| for /f "tokens=1* delims==" %%a in ('set part^|findstr /c:"\" \""') do ( |
| echo; |
| echo [%%a] |
| for %%c in (%%b) do ( |
| echo 文件大小:%%~zc B 修改日期:%%~tc 文件名:%%~nxc |
| ) |
| ) |
| |
| ) else ( |
| for /l %%a in (1001 1 !num!) do ( |
| set num=%%a |
| if not defined part!num:~-3! ( |
| echo Error:缺少第 !num:~-3! 卷 |
| set error=1 |
| ) |
| ) |
| |
| if not defined error ( |
| for /f "tokens=1,2* delims==*" %%a in ('set part') do ( |
| set num=%%a |
| ren %%b "!name!.part!num:~-3!.$rar$"||set error=1 |
| ) |
| ) |
| |
| if not defined error ( |
| rar t "!name!.part???.$rar$"&&echo 测试成功 |
| )||( |
| for /f "tokens=1,2* delims==*" %%a in ('set part') do ( |
| ren "!name!.%%a.$rar$" %%b |
| ) |
| ) 2>nul |
| |
| ) |
| echo; |
| ren *.$rar$ *.rar 2>nul |
| pauseCOPY |