2012-11-20 26 views
0

我有一大堆的RAR文件的其中一些只包含一個或多個文件和一些有一個目錄結構用WinRAR CMD追問結構

我想創建一個bat文件,可以提取與該RAR目錄是&如果沒有目錄使用RAR文件名創建一個目錄&然後提取到關閉過程處理任何錯誤

所以這個CMD將輸出一個列表到一個文本文件

​​

結果

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 .....測試該目錄是否存在&測試文件是否存在

然後創建另一個浴文件來提取文件

但我想知道是否有一個更簡單的方法?

感謝名單

回答

1

您可以用批量scrpit這樣開始:

@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\" 
) 
) 

這將爲每個*.rar文件在當前目錄下執行UnRAR.exe l filename,它則檢查其是否包含字符串.D.....,它如果沒有找到字符串,則在當前dir中提取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\" 
) 
) 
+0

感謝名單那爐排。我添加了一行cd/d%1,將一個路徑作爲參數,我將如何反覆遍歷每個子目錄? – Holly

+0

@holly看到我更新的答案循環通過每個子目錄..謝謝 – fthiella

+0

thanx再次作品一種享受 – Holly