iT邦幫忙

0

壓縮備份批次指令

我的需求是,透過磁碟共享,寫一支vbs或bat來做定期壓縮備份
請問如果我要用7Z(或RAR或ZIP) 去做定期壓縮備份的批次檔
要下怎樣的指令,才能讓指定的目錄底下每個檔案都壓成一個壓縮檔,
不是全部打包喔~~~~
如果有大大可以提供VBS或BAT讓我參考就感激不盡拉~~~~

看更多先前的討論...收起先前的討論...
tom6507 iT邦大師 1 級 ‧ 2008-12-25 17:03:24 檢舉
網路上找的
提供參考

'批次壓縮成zip
@echo off
set a=%ProgramFiles%\7-zip\7zG.exe
for %%a in (%*) do (dir /a %%a|findstr "DIR" >nul 2>nul &&("%a%" a -tzip "%%~dpa%%~na.zip" "%~a\*) || ("%a%" a -tzip "%%~dpa%%~na.zip %%a))



'批次壓縮成7Z
@echo off
set a=%ProgramFiles%\7-zip\7zG.exe
for %%a in (%*) do (dir /a %%a|findstr "DIR" >nul 2>nul &&("%a%" a -mx=9 -t7z "%%~dpa%%~na.7z" "%~a\*) || ("%a%" a -t7z "%%~dpa%%~na.7z %%a))
tom6507 iT邦大師 1 級 ‧ 2008-12-25 17:13:27 檢舉
RAR的壓縮法(非command模式)

davistai iT邦大師 1 級 ‧ 2008-12-25 21:42:33 檢舉
哇, 狐狸大硬是要得!!b
tom6507 iT邦大師 1 級 ‧ 2008-12-26 16:47:55 檢舉
正解一個就夠了,這邊只是提供別的方法,反正我也不是原創(rar的方法很多人應該都知道吧)。再說,我不想搶了jsperng大的風采,更不想降低我的採用率XD
jsperng iT邦研究生 1 級 ‧ 2008-12-30 20:42:55 檢舉
無所謂搶風采這回事,那隻程式我目前正使用中,稍做修改拿出來分享,只是讓大家見笑了,呵呵
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
20
jsperng
iT邦研究生 1 級 ‧ 2008-12-25 16:08:40
最佳解答

程式碼的功能如下,做一些小修改應該可以滿足你的需求:
1.壓縮指定目錄下的所有子目錄下的檔案,只限一層。
2.指定目錄下的檔案並不會壓縮,可依你的需求自行修改。
3.檔案大於5K才壓縮,可依你的需求自行設定。
4.複製的目的地目錄必須存在,會依來源目錄\子目錄,建立相同的子目錄。
5.壓縮檔案成功後,會刪除原始檔,如果不想刪檔,請刪除22~24行指令。
6.壓縮檔案是被搬移到目的地目錄。

<pre class="c" name="code">'目的:壓縮來源目錄內子目錄(只限一層)內之所有檔案及刪除原始檔,每個檔案各自分別壓成一個.zip檔,並將zip檔搬移到另一台電腦
Dim oWsh, oFs, oFile, oFiles, cFName, nFSize, oFld, oSubFlds, oSubFld, cTFld, cTSubFld, cSFld
'------------------------------------
nFSize = 5000 '長度大於 5k 才壓縮
cSFld = "SourceDir" '要壓縮及搬移的來源目錄 Ex. C:\Document
cTFld = "Targetdir" '.zip檔最後要搬移的目錄 Ex. \\BackupServer\BackupDir
Set oWsh = WScript.CreateObject("WScript.Shell") '取得 Shell 物件,給 Run 用
Set oFs = CreateObject("Scripting.FileSystemObject") '建立 FileSystemObject 物件
'------------------------------------
Set oFld = oFs.GetFolder(cSFld) '傳回對應到指定路徑中資料夾的 Folder 物件
Set oSubFlds = oFld.SubFolders '傳回 Folder 物件的 SubFolders 集合物件

For each oSubFld in oSubFlds '取出各個子目錄
	Set oFiles = oSubFld.Files '傳回指定資料夾中所有File物件的Files集合物件,其中包含設定隱藏和系統檔案屬性的檔案
	'------ 壓縮資料夾內的各個檔案 ------
	For Each oFile in oFiles '取出子目錄內的各個檔案
		If Right(oFile.name,4) <> ".zip" and Right(oFile.name,4) <> ".rar" and oFile.name <> "Compress_curdir.vbs" Then

			If oFile.size > nFSize Then '長度大於 nFSize 才壓縮
				cFName = " """ & oFile.path & ".zip"" " '壓縮後檔名,用雙引號包住,前後各加一個空白
				If oWsh.Run("""C:\Program Files\WinZip\WzZip.exe""" & cFName & """" & oFile.path & """" , , true) = 0 Then '執行 WinZip 壓縮檔案
					On Error Resume Next
						oFile.delete '壓縮檔案成功後,刪除原始檔
					On Error GoTo 0
				End If
			'Wscript.Echo oFile.path & "/" & cFName '顯示新舊檔案之路徑檔名
			End If
		End If
	Next

	'------ 搬移壓縮檔到另一個目錄,子目錄不存在時自動建立 ------
	cTSubFld = cTFld & oSubFld.Name & "\"
	'MsgBox(cTSubFld)
	On Error Resume Next
	If not (oFs.FolderExists(cTSubFld)) Then
	      oFs.CreateFolder(cTSubFld)
	End If
	oFs.MoveFile oSubFld.path & "\*.zip" , cTSubFld
	On Error GoTo 0
Next
'=== End ===
看更多先前的回應...收起先前的回應...
ericshn iT邦新手 5 級 ‧ 2008-12-30 11:55:32 檢舉

If Right(oFile.name,4) <> ".zip" and Right(oFile.name,4) <> ".rar" and oFile.nam
這行的作用是??抱歉我很菜~~~

ericshn iT邦新手 5 級 ‧ 2008-12-30 11:59:36 檢舉

cFName = " """ & oFile.path & ".zip"" " '壓縮後檔名,用雙引號包住,前後各加一個空白
這邊我應該不用修改吧?

執行後會出現~~~找不到壓縮檔的對話框.....不知到哪裡錯了

ericshn iT邦新手 5 級 ‧ 2008-12-30 15:38:23 檢舉

壓縮我已經成功了~~~
不過搬移檔案的地方失敗了~~~~

ericshn iT邦新手 5 級 ‧ 2008-12-30 16:07:25 檢舉

歹勢~~~~
我終於試出來了!!
謝謝你的解答!!

ericshn iT邦新手 5 級 ‧ 2008-12-30 16:13:06 檢舉

不過要怎要才能修改成,壓縮指定目錄下的所有檔案(包含子目錄)
而不是只壓縮子目錄底下的檔案呢?

jylin168 iT邦新手 4 級 ‧ 2008-12-30 20:37:20 檢舉

最好要把壓縮和搬移寫成副程式,再加判斷是否還有子目錄,有的話再Call它,抱歉年底比較忙,再加上公司搬家,所以沒辦法寫例子,以後有時間再補了

19
海綿寶寶
iT邦大神 1 級 ‧ 2008-12-25 17:52:49

年輕人寫VBS
老頭子的批次檔又來了

1.寫個 zzzzzzz.bat,內容如下

&lt;pre class="c" name="code">
CD %1
FOR %%I IN (*.*) DO 7z a -tzip "%%I.zip" "%%I"

2.執行方式如下例:
zzzzzzz D:\Data\January

他就會自己 CD 到 D:\Data\January 目錄下
把每一個檔案都用 7Zip 壓縮起來
如果原來有 50 個檔案
執行完成後就會有 100 個檔案(加了 50 個壓縮檔)
壓縮檔的名字是原來的檔案後面加上 .zip

寫完收工

看更多先前的回應...收起先前的回應...
Pankt iT邦研究生 1 級 ‧ 2008-12-26 09:29:39 檢舉

會以 zzz 命名的批次檔,不知閣下是否傳承了,七十年代DOS 前輩們,進行編譯,動輒數十個,甚至上百支程式,耗掉幾十分鐘,在漫長的編譯過程裡,不知不覺打起瞌睡,長期累積的心得,有感而發的使用了這個檔名、、、??
我是以z 的多寡來決定編譯時間的長短啦、、、XD

DOS 最令我懷念的就是單工作業
在將PEII或HE5打了半天的文件送去列印之後
就是抽煙咖啡泡茶的時間了
而且名正言順,義正詞嚴

後來變成Windows系統
剛開始電腦慢
還是可以趁「游標變成漏斗」的時侯喘口氣

現在電腦越來越快
看見漏斗的機會也越來越少(除非蛋機)

美好的時光總在過去
感嘆呀...

tom6507 iT邦大師 1 級 ‧ 2008-12-27 00:44:31 檢舉

To antijava
你可以把游標改成漏斗來假裝一下XD

請問要gz可以嗎? tar可以嗎?

8
allurlbt
iT邦新手 4 級 ‧ 2008-12-26 09:35:21

在之前我都是製作每日備份的資料,例如是備份我的最愛...

&lt;pre class="c" name="code">
XCOPY "%userprofile%\Favorites" "d:\backup\Favorites" /D /H /I /S /Y
XCOPY "%userprofile%\Local Settings\Application Data\Google\Chrome\User Data\Default\Bookmarks" "d:\backup\ChromeBookmarks" /D /H /I /S /Y

我要發表回答

立即登入回答