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:

一年級下學期晨光活動 - 認識台灣縣市位置

今天帶小一下學期的晨光活動,發現過年期間爸媽帶著小朋友往南走北全省玩透透,孩子只知道當地的地名(例:墾丁)。覺得爸媽開車開很久,卻不知道那是台灣的哪個縣市。

活動進行中,有人從北部地區一直猜「高雄」,直到中部、東部都走完,每個都舉手回答高雄。甚至將連江縣看成「英國」,台灣變成一個小地球似的,去英國玩只要搭飛機50分鐘!

活動準備材料如下:
投影片: 範例請按此下載
獎勵品: 小包裝的餅乾,分幾種口味可以讓小孩自己選。

活動進行方式:

  1. 詢問大家過年去哪邊玩?(小朋友會回答地名,可以再加問那在哪個縣市?)
  2. 縣、市有多大?小朋友家裡的地址是怎麼寫的?為什麼要先「台北市」再接「文山區」?
  3. 打開投影片,詢問這個島嶼叫什麼?有人知道過年去台灣的那個位置嗎?
  4. 開始「猜」縣市名稱,舉手答對的小朋友可以來台前選自己喜歡的餅乾。
  5. 揭曉答案時,可以附加說明當地有什麼特產或特色。(例如我說基隆以前人口眾多的原因是旁邊有基隆港,港口可以和國際做交易,經濟也相對發達,馬上就有小朋友說那個地方是爸爸小時候的家,爸爸也曾經開船出海捕魚過。)
  6. 各縣市介紹完後,因為離元宵節後不久,可以猜我們居住地附近的地名。不過縣市介紹完就下課時間了,這部份可以依時間安排是否添加。
  7. 結束後可以請沒拿到獎勵的同學來台前選剩下的餅乾。

投影片畫面 - 認識台灣:
 投影片畫面 - 猜縣市,紅色是要請同學猜的:
 投影片畫面 - 地名的謎語:

Share:

熱門文章