close

最近有個需求,就是固定時間內把某個資料夾內的檔案(不含子資料夾),壓縮成1個自解檔

而這個自解檔於執行時必需自動將檔案解壓到特定目錄,解壓完成後自動執行某個檔案

看起來似乎很複雜,不過事實上流程簡化後只有2個步驟

1.把檔案加入壓縮檔,並且引入解壓縮的參數
2.於 Windows 內的排程執行此指令

關於第2步驟 google 找一下就一堆教學了,在此不再贅述

第一步驟則是比較麻煩一點

 

首先,先建立一個檔案名為 config.txt 的文字檔,內容如下

1
2
3
4
5
Path=C:\Test_Dir
Title=測試自動解壓縮
Overwrite=1
Silent=2
Setup=setup.exe

這個檔為 WinRAR 要自動解壓縮時的參數檔

上面這些參數的意思代表

1.按下自解檔時,不詢問,自動執行解壓縮 (Silent=2)
2.要把檔案解壓縮到 C:\Test_Dir 這個目錄 (Path=C:\Test_Dir)
3.如果檔案存在就蓋過去 (Overwrite=1)
4.解壓縮完後自動執行 setup.exe (Setup=setup.exe)

接下來是使用指令模式來建立 WinRAR 的自解檔

先建立檔名為 run.bat 的批次檔,內容為

1
2
3
del "C:\out.exe"
path=%path%"C:\Program Files\WinRAR\";
winrar a -m2 -sfx -ibck -ep -zC:\config.txt "C:\out.exe" "C:\Target_Dir"

上面的意思表示

1.建立前先把舊的檔案刪除,如果沒刪除會一直累加進去壓縮檔 (del "C:\out.exe")
2.把 Winrar 的路徑加入 Path 以便使用 (path=%path%"C:\Program Files\WinRAR\";)
3.使用建立自動解壓縮檔的模式 (-sfx)
4.壓縮率設為一般 (-m2)
5.去掉檔案的完整路徑 (-ep)
6.於背景中壓縮檔案 (-ibck)
7.把解壓縮時的參數檔引入 (-zC:\config.txt)
8.壓縮檔完成時的存放位置 ("C:\out.exe")
9.要壓縮的檔案位置 ("C:\Target_Dir")

P.s 如果想要壓縮目標要包含子資料夾請加上一個參數 -r 就行了

接下來把 run.bat 放到 Windows 排程中執行就可以了

如果大家對參數檔有興趣,可以使用 WinRAR 的"參數產生器"來玩玩

先隨便找個檔案加入壓縮檔,接下來就看圖說故事

.

最後產生出來的參數會放在註解裡面

15 Responses to “WinRAR於指令模式自動化壓縮”

  1. judy Says: 

    您好:
    不知有沒有什麼方式能自動掃瞄系統指定中的目錄並且解壓縮呢?
    thanks

  2. jason Says: 

    順手寫了一個批次檔可以解決這個問題
    過幾天我再寫一篇詳細的文章,先把程式給你使用一下
    把下面存成 Unrar.bat,放到你要指定的目錄下,執行後就會解壓該目錄下所有的RAR檔

    @ECHO OFF
    REM AFTER_UNRAR_DELETE_FILE=YES 解壓後刪除原始的壓縮檔
    REM AFTER_UNRAR_DELETE_FILE=NO 解壓後保留原始的壓縮檔

    REM 在此設定要不要刪原始檔(大小寫有分別)
    SET AFTER_UNRAR_DELETE_FILE=NO
    REM 在此設定WINRAR的路徑
    SET WINRAR_PATH=C:\PROGRA~1\WinRAR\WinRAR.exe

    FOR %%F IN (*.rar) DO (
     ECHO "解壓 %%F..."
    MKDIR "Unrar_%%F"
    %WINRAR_PATH% x "%%F" * "Unrar_%%F"\
    IF %AFTER_UNRAR_DELETE_FILE%==YES (Del "%%F")
    )

  3. 批次解壓縮檔案 | 電腦茶包 Blog Says: 

    [...] 延伸閱讀:WinRAR於指令模式自動化壓縮 [...]

  4. 您好 Says: 

    承jason 的問題,如果指定中的目錄含有分割的WINRAR壓縮檔(如PART1 PART2....等等)該怎麼辦?

    thanks

  5. jason Says: 

    如果用上述的程式去跑,資料會被重覆的解出來,並放在各別的資料夾裡面
    xxx.part1.rar
    xxx.part2.rar
    xxx.part3.rar

    建議可以小修改一下程式
    只要去解 xxx.part1.rar 就可以了
    其他的分割檔Winrar會幫你搞定

    尋找
    FOR %%F IN (*.rar) DO (
    改成
    FOR %%F IN (*.part1.rar) DO (

  6. ritek Says: 

    您好
    如果資料夾裡含有分割壓縮檔及一般壓縮檔的話要如何修改?
    還有如果壓縮檔裡還有一個壓縮檔的話要如何一併解壓縮
    謝謝

  7. jason Says: 

    第一層解壓完後
    把批次檔copy一份到第二層裡面去
    在第二層裡執行批次檔

    如有第三、四.....層的話,以此類推

  8. ritek Says: 

    您好
    那如果一個資料夾裡有分割壓縮檔(xxx.part1 xxx.part2)及一般的壓縮檔(.rar)
    用上述的改法只能解出分割壓縮檔,有辦法2種都解出來嗎?
    謝謝

  9. jason Says: 

    以目前陽春的bat是無法做到你所說的功能
    不過有個取巧的做法,你可以參考看看

    把可解正常RAR的批次檔,存成a.bat
    把可解分割RAR的批次檔,存成b.bat

    新增一個all.bat,去呼叫a.bat與b.bat
    或是把a.bat與b.bat的內容寫一起寫進all.bat也可以

    這樣就可以通吃了

  10.  Says: 

    是否有辦法在解壓縮完畢之後刪除主體@@?

    我使用 Delete=%USERPROFILE%\桌面\壓縮檔案名稱

    貌似不行呢@@ˇ

  11. jason Says: 

    把下面的文字存成 a.bat ,放到壓縮檔的位置執行
    就可以自動解壓該資料夾下的所有 *.rar,解壓完會自動刪除壓縮檔

    REM 在此設定要不要刪原始檔(大小寫有分別)
    SET AFTER_UNRAR_DELETE_FILE=YES
    REM 在此設定WINRAR的路徑
    SET WINRAR_PATH=C:\PROGRA~1\WinRAR\WinRAR.exe

    FOR %%F IN (*.rar) DO (
     ECHO "解壓 %%F..."
    MKDIR "Unrar_%%F"
    %WINRAR_PATH% x "%%F" * "Unrar_%%F"\
    IF %AFTER_UNRAR_DELETE_FILE%==YES (Del "%%F")
    )

  12. JEREMY Says: 

    如何在自動解壓到a資料夾前~先刪除a資料夾裡面的所有東西呢?

  13. jason Says: 

    to JEREMY:
    可以配合RD指令使用,以下說明供參考

    Microsoft Windows [版本 6.1.7601]
    Copyright (c) 2009 Microsoft Corporation. All rights reserved.

    C:\Users\xxx>rd /?
    移除 (刪除) 一個目錄。

    RMDIR [/S] [/Q] [drive:]path
    RD [/S] [/Q] [drive:]path

    /S 除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。
    用於移除樹狀目錄結構。

    /Q 安靜模式,有 /S 時,刪除目錄樹結構不再要求確認

  14. JEREMY Says: 

    TO JASON:
    RD這指令如果要加在rar註解中可行嗎?
    謝謝解答

  15. jason Says: 

    to JEREMY:
    應該是不行把RD加在rar的註解中。
    不過你可以考慮寫一個bat檔,把要作的事與流程寫在裡面,
    然後把這個bat設成預設會執行的程式就可以了

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 valerius66 的頭像
    valerius66

    valerius

    valerius66 發表在 痞客邦 留言(0) 人氣()