Exploring and Thinking

使用 nodejs 配合 WinRAR 壓縮指定的日期資料夾至遠端磁碟機

以下作法適用環境如下:

  1. 本地資料夾皆會每天產生日期(ex.20171214)的子目錄
  2. 該目錄需壓縮後,放到別台資料夾裡。(在此以存到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);
 });
};
Share:

熱門文章