0

私はたくさんのrarファイルを持っています。そのうちのいくつかは1つまたは複数のファイルだけを含み、いくつかはディレクトリ構造を持っています

ディレクトリをそのまま使用してrarを抽出できるbatファイルを作成したいのですが、ディレクトリがない場合は、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スクリプトを作成して、それを読み取り、find / pattern match .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 に答える