我的需求是,透過磁碟共享,寫一支vbs或bat來做定期壓縮備份
請問如果我要用7Z(或RAR或ZIP) 去做定期壓縮備份的批次檔
要下怎樣的指令,才能讓指定的目錄底下每個檔案都壓成一個壓縮檔,
不是全部打包喔~~~~
如果有大大可以提供VBS或BAT讓我參考就感激不盡拉~~~~
@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))
@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))
程式碼的功能如下,做一些小修改應該可以滿足你的需求:
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 ===
If Right(oFile.name,4) <> ".zip" and Right(oFile.name,4) <> ".rar" and oFile.nam
這行的作用是??抱歉我很菜~~~
cFName = " """ & oFile.path & ".zip"" " '壓縮後檔名,用雙引號包住,前後各加一個空白
這邊我應該不用修改吧?
執行後會出現~~~找不到壓縮檔的對話框.....不知到哪裡錯了
壓縮我已經成功了~~~
不過搬移檔案的地方失敗了~~~~
年輕人寫VBS
老頭子的批次檔又來了
1.寫個 zzzzzzz.bat,內容如下
<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
寫完收工
會以 zzz 命名的批次檔,不知閣下是否傳承了,七十年代DOS 前輩們,進行編譯,動輒數十個,甚至上百支程式,耗掉幾十分鐘,在漫長的編譯過程裡,不知不覺打起瞌睡,長期累積的心得,有感而發的使用了這個檔名、、、??
我是以z 的多寡來決定編譯時間的長短啦、、、XD
在之前我都是製作每日備份的資料,例如是備份我的最愛...
<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