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:

踢掉遠端主機上桌面連線帳號的簡易批次檔

這個算是一個很冷門的使用需求,主要是用來一鍵踢掉某台主機的全部遠端連線使用者。

將程式碼存成.bat,再執行這個檔案。輸入目標ip即可:

程式碼重點說明:

  1. if 是判斷是否有輸入值,沒有就直接中斷批次檔。
  2. net use 是先製造遠端權限,待清除完之後自動結束。
  3. for /l 裡的 in (0, 1, 10) 代表從0開始累加1,直到10為止。
  4. tsdiscon 是結束遠端桌面連線指令。

@echo.
@echo off
set /p ip="Please input Server IP: "
if "%ip%" NEQ "" GOTO :kickRD
GOTO :end
:kickRD
net use \\%ip% /user:帳號 "密碼"
for /l %%x in (0, 1, 10) do (
tsdiscon %%x /SERVER:%ip%
net use \\%ip% /delete 
)
:end
Share:

Mac 設定永久靜態路由

一般在Mac指定路由,需在 Terminal 下「sudo route -n add -net 192.168.20.0/24 10.0.1.251」才能臨時連到192.168.20網段的主機,重開機設定就會消失。以下是永久設定的方式:

1. 一樣在 Terminal 輸入以下指令 (設定Ethernet網卡,透過10.0.1.251gw連到192.168.20.0和192.168.10.0網段為例)

networksetup -setadditionalroutes "Ethernet" 192.168.20.0 255.255.255.0 10.0.1.251 192.168.10.0 255.255.255.0 10.0.1.251

2. 檢查是否有設進去:

networksetup -getadditionalroutes Ethernet



註. 列出網路設備指令,再依需求設定進去: 「networksetup -listallnetworkservices」

Share:

iTerm2 + Oh My Zsh + Solarized color scheme + Meslo powerline font + [Powerlevel9k]

不錯的 iTerm2 加畫面顯示設定,對於做git非常好用。
留存記錄: https://gist.github.com/kevin-smets/8568070
PS. 另一個Oh My Zsh的theme: https://github.com/caiogondim/bullet-train.zsh
Share:

熱門文章