0

我有一堆 rar 文件,其中一些只包含一个或多个文件,有些有一个目录结构

我想创建一个 bat 文件,它可以按原样提取带有目录的 rar,如果没有目录,则使用 rar 文件名创建目录,然后提取到该目录,处理任何错误

所以这个 cmd 会输出一个列表到一个文本文件

C:\Program Files\WinRAR>UnRAR.exe l H:\temp\test.rar >H:\temp\test.txt

结果是

UNRAR 4.20 freeware      Copyright (c) 1993-2012 Alexander Roshal

Archive H:\temp\Test.rar

 Name             Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 Test.TXT            0        0   0% 20-11-12 18:44  .....A.   00000000 m0b 2.9
-------------------------------------------------------------------------------
    1                0        0   0%

对于没有目录结构的 rar 文件和

UNRAR 4.20 freeware      Copyright (c) 1993-2012 Alexander Roshal

Archive H:\temp\testDir.rar

 Name             Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 Test.TXT            0        0   0% 20-11-12 18:44  .....A.   00000000 m0b 2.9
 test                0        0   0% 20-11-12 18:45  .D.....   00000000 m0  2.0
-------------------------------------------------------------------------------
    2                0        0   0%

有目录

我可以创建一个 perl 脚本,将这个列表输出到一个临时文本文件中读取它查找/模式匹配.D.....测试该目录是否存在并测试文件是否存在

然后创建另一个浴文件来提取文件

但我想知道是否有更简单的方法?

谢谢

4

1 回答 1

1

您可以从这样的批处理脚本开始:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.rar) do (
  UnRAR.exe l "%%a" | findstr /C:".D....." >nul
  if !errorlevel!==0 (
    echo File %%a contains dirs
    UnRAR.exe x "%%a"
  )
  if !errorlevel!==1 (
    echo File %%a does not contain dirs, extracting in %%~na
    mkdir "%%~na"
    UnRAR.exe x "%%a" "%%~na\"
  )
)

这将对当前目录UnRAR.exe l filename中的每个*.rar文件执行,然后检查它是否包含字符串.D.....,如果找不到字符串,它将在当前目录中提取 rar,否则它将创建一个与存档具有相同文件名的目录(但没有扩展名)并在那里提取档案。请检查我使用的 UnRAR.exe 的语法是否正确。

编辑:此代码通过子目录递归循环:

@echo off
setlocal EnableDelayedExpansion

for /r "%1" %%a in (*.rar) do (
  UnRAR.exe l "%%a" | findstr /C:".D....." >nul
  if !errorlevel!==0 (
    echo File %%a contains dirs, extracting in "%%~dpa"
    UnRAR.exe x "%%a" "%%~dpa"
  )
  if !errorlevel!==1 (
    echo File %%a does not contain dirs, extracting in %%~dpna
    mkdir "%%~na"
    UnRAR.exe x "%%a" "%%~dpna\"
  )
)
于 2012-11-20T22:12:29.163 回答