星期二, 2月 22, 2011

7z (7zip) 壓縮檔案包含路徑的方式

因為想把整個目錄底下的檔案及子目錄都壓縮起來備份. 所以去 google 一下如何把路徑名稱也一併包含在壓縮檔中.
語法:
7z a zipfile_name.7z @ziplistfile.lst

其中 ziplistfile.lst 裡包含了有要壓縮的檔名及路徑.
如果目錄的結構如下:

dir1\1.bin
2.bin
3.prj
a.exe
+--- subdir1\
a.txt
b.txt
c.bin
+--- subdir2\
1.txt
2.doc
3.doc
++---subdir22
20.txt
21.txt

我要把 dir1\a.exe 及 subdir1 及 subdir2 底下的檔案全壓縮. 那麼 ziplistfile.lst 的內容就會像以下這樣:

a.exe
subdir1\
subdir2\

之後把這些寫成 batch file, 存在要壓縮的目錄下, 就可以很容易達成要壓縮的目地了.
batch file 的內容(把檔名加入日期):

setlocal
set hh=%time:~0,2%
if "%time:~0,1%"==" " set hh=0%hh:~1,1%
set yyyymmdd_hhmm=%date:~0,4%%date:~5,2%%date:~8,2%_%hh%%time:~3,2%

7z a backup_%yyyymmdd_hhmm%.7z @backupfilelist.txt
move backup__%yyyymmdd_hhmm%.7z .\backup

這樣就 ok 了.

如果不想把 subdir2\subdir22 給包進去, 再寫一個 exculde file list (exfilelist.txt):

subdir2\subdir22\

接下來把 command 改成:
7z a -x@exfilelist.txt backup_%yyyymmdd_hhmm%.7z @backupfilelist.txt

ok!