2014-07-21 124 views
0

我遇到了BAT文件的問題,它不會將文件解壓到其完整路徑名稱,因爲某些zip文件包含名爲相同名稱但含有不同銷售數據的文件使用BAT文件將文件解壓縮到完整路徑

示例文件

MainLine20140606.zip contains marketingdb.mdb 
Valis20140606.zip contains marketingdb.mdb 

我不希望這些過度寫對方,但不希望有手動干預無論是。

bat文件解壓的文件夾中的任何zip文件是從運行:

@echo off 
for /F "delims=" %%I IN (' dir /b /s /a-d *.zip ') DO (
    "C:\Program Files\WinRAR\WinRAR.exe" x -y -o"%%~dpI\%%~fI" "%%I" 
) 
pause 
+0

有一些不清楚的東西:你是否想要用zip文件的名稱來提取單獨文件夾中的每個zip文件,或者需要的是將輸出文件重命名的同一文件夾中的所有文件提取出來? –

+0

您建議的任一解決方案都能正常工作我必須將mdb解壓出來,然後使用zip文件夾名稱和mdb名稱對其進行重命名,或將它們解壓縮到單獨的文件夾中,該文件夾在包含其mdb的zip文件後以該方式不必重命名他們。 – LoveToys

回答

1
@echo off 
    setlocal enableextensions disabledelayedexpansion 
    set "rarCmd=%programFiles%\WinRAR\WinRAR.exe" 

    for /r "%cd%" %%a in (*.zip) do "%rarCmd%" x -or -y "%%~fa" * "%~dp0%%~na\" 

    endlocal 

對於當前的文件夾(/r "%cd%"),呼叫WinRAR解壓(x)下的每個壓縮文件,具有自動重命名(-or)如果需要的話,假定是對所有查詢(-y),則壓縮文件(%%~fa,即具有完整路徑的文件),選擇所有文件內容(*),並將輸出放在與放置批處理文件的文件夾下的文件夾(%%~na)同名的文件夾中(%~dp0

包含-or以便不覆蓋以前運行的文件,如果不需要則將其刪除。

也可以指定目標文件夾的名稱,在命令中添加-ad開關並從目標文件夾中刪除%%~na\

+0

絕對精湛你的位置正是我希望它是非常感謝你大量的讚美:)虐待轉發鏈接到這個答案在其他論壇再次感謝你 – LoveToys

0

您可以使用命令

"C:\Program Files\WinRAR\WinRAR.exe" e -ad "Path To\ZIP Files\*.zip" "Path To\Target\Folder\" 

使用此命令的WinRAR解壓所有* .zip文件中Path To\ZIP Files\Path To\Target\Folder\,從而對於每個ZIP文件,ZIP文件的名稱被附加到目標目錄路徑。

後WinRAR的完成所有解壓ZIP文件,您可以運行以下批處理文件在所有子文件夾中創建的所有marketingdb.mdb移到原來的目標文件夾重命名MDB文件並刪除現在是空的子文件夾。

@echo off 
cd /D "Path To\Target\Folder\" 
for /F "delims=" %%I in ('dir * /b /ad') do (
    move "%%I\marketingdb.mdb" "%%I.mdb" 
    rd "%%I" 
) 
+0

這是一個非常好的努力,但我一直嘗試使用它時出現錯誤,非常感謝你的回答,儘管非常感謝:) – LoveToys

+0

@LoveToys,請讓我知道你在執行**時遇到哪些錯誤** WinRAR **或批處理文件?我根據你的問題嘗試了2個ZIP文件,每個只包含'marketingdb.mdb',並且在執行** WinRAR **或批處理文件時沒有發生錯誤。你的ZIP文件不僅包含'marketingdb.mdb'嗎? – Mofi

+0

是的,有一個名爲TDmarketingdb.accdb的數據庫,但它不是那個錯誤,它沒有提取或創建帶有zip文件夾的文件夾,也沒有提取我必須手動指向文件夾和文件,所以無法自動運行。 – LoveToys