最近有個需求,就是固定時間內把某個資料夾內的檔案(不含子資料夾),壓縮成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 的"參數產生器"來玩玩
先隨便找個檔案加入壓縮檔,接下來就看圖說故事
.
最後產生出來的參數會放在註解裡面
九月 3rd, 2009 at 11:53:49
您好:
不知有沒有什麼方式能自動掃瞄系統指定中的目錄並且解壓縮呢?
thanks
九月 3rd, 2009 at 16:32:13
順手寫了一個批次檔可以解決這個問題
過幾天我再寫一篇詳細的文章,先把程式給你使用一下
把下面存成 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")
)
九月 8th, 2009 at 14:19:14
[...] 延伸閱讀:WinRAR於指令模式自動化壓縮 [...]
六月 20th, 2010 at 12:04:24
承jason 的問題,如果指定中的目錄含有分割的WINRAR壓縮檔(如PART1 PART2....等等)該怎麼辦?
thanks
六月 20th, 2010 at 16:21:12
如果用上述的程式去跑,資料會被重覆的解出來,並放在各別的資料夾裡面
xxx.part1.rar
xxx.part2.rar
xxx.part3.rar
建議可以小修改一下程式
只要去解 xxx.part1.rar 就可以了
其他的分割檔Winrar會幫你搞定
尋找
FOR %%F IN (*.rar) DO (
改成
FOR %%F IN (*.part1.rar) DO (
六月 26th, 2010 at 19:51:20
您好
如果資料夾裡含有分割壓縮檔及一般壓縮檔的話要如何修改?
還有如果壓縮檔裡還有一個壓縮檔的話要如何一併解壓縮
謝謝
六月 26th, 2010 at 20:41:54
第一層解壓完後
把批次檔copy一份到第二層裡面去
在第二層裡執行批次檔
如有第三、四.....層的話,以此類推
六月 26th, 2010 at 21:36:20
您好
那如果一個資料夾裡有分割壓縮檔(xxx.part1 xxx.part2)及一般的壓縮檔(.rar)
用上述的改法只能解出分割壓縮檔,有辦法2種都解出來嗎?
謝謝
六月 26th, 2010 at 22:15:56
以目前陽春的bat是無法做到你所說的功能
不過有個取巧的做法,你可以參考看看
把可解正常RAR的批次檔,存成a.bat
把可解分割RAR的批次檔,存成b.bat
新增一個all.bat,去呼叫a.bat與b.bat
或是把a.bat與b.bat的內容寫一起寫進all.bat也可以
這樣就可以通吃了
七月 18th, 2010 at 17:28:45
是否有辦法在解壓縮完畢之後刪除主體@@?
我使用 Delete=%USERPROFILE%\桌面\壓縮檔案名稱
貌似不行呢@@ˇ
七月 18th, 2010 at 19:02:38
把下面的文字存成 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")
)
一月 4th, 2013 at 11:46:31
如何在自動解壓到a資料夾前~先刪除a資料夾裡面的所有東西呢?
一月 4th, 2013 at 23:58:24
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 時,刪除目錄樹結構不再要求確認
一月 5th, 2013 at 20:20:02
TO JASON:
RD這指令如果要加在rar註解中可行嗎?
謝謝解答
一月 5th, 2013 at 22:07:36
to JEREMY:
應該是不行把RD加在rar的註解中。
不過你可以考慮寫一個bat檔,把要作的事與流程寫在裡面,
然後把這個bat設成預設會執行的程式就可以了