首页 > 解决方案 > 如何使用 7-zip 命令(或任何替代解决方案)获取 RAR 文件卷索引

问题描述

我有一些文件(下载了 207 个 RAR 文件),它们没有正确的名称来引用每个部分/索引,如果我想提取它们,我应该通过检查卷索引(从属性部分)手动命名它们,并且如您所见,这可能太耗时

我以为我可以使用批处理或python脚本来做,所以我需要做的第一件事是从CMD“7z i FileName.rar”中获取卷索引,但是我找不到卷索引号(或者可能是十六进制)来自输出我使用了错误的命令吗?或者它是打印出来的,但我找不到?

我附上一个 RAR 文件输出(卷索引为 18 [这是第 19 部分]) https://www.pastiebin.com/5cee55060c642

如果您能帮助我,我将不胜感激。

标签: pythonbatch-filemultipart7ziprar

解决方案


您应该能够使用l(list) 命令完成此操作。

这是一个简单的 Windows 命令:

for %a in (*.rar) do @ECHO %a & "C:\Program Files\7-Zip\7z.exe" l %a | FIND "Index" & ECHO.

这是批处理文件版本(%%而不是%):

@ECHO off
for %%a in (*.rar) do ECHO %%a & "C:\Program Files\7-Zip\7z.exe" l %%a | FIND "Index" & ECHO.

这将从该文件的l(list) 命令的输出中回显文件名和“卷索引”字段,如下例所示:

myFile.part1.rar
Volume Index = 0

myFile.part2.rar
Volume Index = 1

myFile.part3.rar
Volume Index = 2

要按顺序重命名所有文件,可以使用以下批处理文件。

警告这将影响运行它的目录中的所有文件,并且原始文件名将丢失。

@ECHO off

SET PATH=%PATH%;C:\Program Files\7-Zip\
for %%a in (*) do CALL:Index "%%~a"
GOTO:EOF

:Index
ECHO %~1
SETLOCAL EnableDelayedExpansion
for /f "tokens=3 delims== " %%a in ('7z.exe l "%~1" ^| FIND "Index"') do CALL:Rename "%~1" %%a
ENDLOCAL
GOTO:EOF

:Rename
SET /A Index=%2+1
REN "%~1" file%Index%.rar

推荐阅读