- 本地資料夾皆會每天產生日期(ex.20171214)的子目錄
- 該目錄需壓縮後,放到別台資料夾裡。(在此以存到NAS為例)
程式一開始開放使用者做設定,該台主機只要裝Winrar和nodejs即可,不需裝額外插件。
// ============================ 備份參數設定 ===================================== var NASFolder = "\\\\192.168.1.1\\log_data\\test"; // 存放的NAS資料夾 var CompressFilename = "Compresstest"; // 存放的NAS檔名(後面會自動補日期) var SourceFolder = "D:\\test"; // 要備份的本地端資料夾(後面會自動補日期) var afewdaysago = '1'; //要備份前幾天?(1代表前一天) var bkextensionfile = ""; // 空值是全部檔案備份。若加副檔名則只會備份有填入的檔案類型, 例如要備dat和log檔案,需填入「dat,log」。 var rardf = "N"; // 「Y」壓縮後刪除原有資料,「N」空值壓縮後保留原有資料。 var addYearMonthFolder = "N"; // 「Y」自動在NAS資料夾加上年、月資料夾,壓縮檔會自行放入該年資料夾裡的月資料夾 // ============================================================================= var fs = require('fs') // 使用檔案系統 var exec = require('child_process').exec, child; // 執行外部執行的module var MyDate = new Date(); // 抓取現在時間 var MyDateString; var NASFolderStore; var rarn = ""; var rarpath; // 取得要壓縮的檔名(日期) MyDate.setDate(MyDate.getDate() - afewdaysago); MyDateString = MyDate.getFullYear() + ('0' + (MyDate.getMonth() + 1)).slice(-2) + ('0' + MyDate.getDate()).slice(-2); //此段程式讓日期補零 20140816 // 重新連線網路磁碟機 child = exec('net use ' + NASFolder + ' /delete /y', function (error, stdout, stderr) { exec('net use ' + NASFolder + ' "密碼" /user:帳號'); }); // 自動加年、月資料夾 if (addYearMonthFolder.toUpperCase() == "Y") { NASFolderStore = NASFolder + '\\' + MyDateString.slice(0,4) + '\\' + MyDateString.slice(4,6); child = exec('mkdir ' + NASFolderStore); } else { NASFolderStore = NASFolder; }; // 指定只要備份的副檔名 if (bkextensionfile != "") { bkextensionfile.split(",").forEach(function(item) { rarn = ("-n*." + item.trim() + " " +rarn); }); console.log ("Backupfiile:",rarn); }; // 判斷Winrar裝在Program Files (x86)與否 if (fs.existsSync("C:\\Program Files\\WinRAR\\rar.exe")) { rarpath = "C:\\Program Files\\WinRAR\\rar.exe"; } else if (fs.existsSync("C:\\Program Files (x86)\\WinRAR\\rar.exe")) { rarpath = "C:\\Program Files (x86)\\WinRAR\\rar.exe"; } else { console.log ("Please install WinRAR !!"); }; // 執行壓縮程式 console.log(SourceFolder + '\\' + MyDateString); if (fs.existsSync(SourceFolder + '\\' + MyDateString)) { if (rardf.toUpperCase() == "Y") { rardf = "-df" } else { rardf ="" }; child = exec('"'+rarpath+'" a -ep1 '+ rardf +' -r '+ rarn +' -m5 -idq "'+CompressFilename+'_'+MyDateString+'.rar" "'+SourceFolder+'\\'+MyDateString+'" >nul', function (error, stdout, stderr) { // 將檔案搬到NAS exec('move /y ' + CompressFilename + '_'+ MyDateString +'.rar ' + NASFolderStore); }); };