2007年3月7日

懶人一族的資料備份方案

懶人一族的資料備份方案
xcopy D:\command\111\*.* D:\command\222 /s /e /c /i /y

決定了需要備份的資料檔後,有沒有方法可以讓懶人也可以經常備份?答案是:有!只要最初的時候花三十分鐘(或更少)寫一個批次檔Batch File,只針對這類資料檔案作備份。﹝以下這些資料只適合Windows 95/98/Me/NT/2000用戶,其他作業系統的用者請不吝賜教吧!﹞

甚麼是批次檔?簡單來說,它是一個純文字檔,裡頭有一些Windows前身的DOS指令而已。以下是筆者自己所寫的一個批次檔 lazybkup.bat,裡面包含了「把筆者硬碟內的好幾十個個人網頁原始檔﹝包括所有子目錄檔案﹞及Netscape 4.7的書籤複製到軟碟機和硬碟另一個目錄裡」的指令。當筆者一按滑鼠左鍵,它就會自動進行備份,而且只把未複製過的或更新過的檔案複製。

xcopy "c:\my documents\homepage\*.*" a:\homepage\ /d /s /e /c /i /y
xcopy "c:\my documents\homepage\*.*" c:\backup\homepage\ /d /s /e /c /i /y
xcopy "c:\program files\netscape\users\franklenchoi\bookmark.htm" a:\bookmark\ /d /c /i /y
xcopy "c:\program files\netscape\users\franklenchoi\bookmark.htm" c:\backup\bookmark\ /d /c /i /y


這個指令叫 xcopy,它的語法是:

XCOPY(空格)要被複製的檔案的路徑(空格)存放複製品的目錄(空格)
[/a/m][/d[:date]][/p][/s[/e]][/w][/c][/i][/q][/f][/l][/h][/r][/t][/u][/k][/n][/y/~y]
(後面的英文字母是xcopy各項功能的開關制─如有興趣可參考附錄)


要建立這個批次檔,只需開啟記事本(notepad),輸入上述指令,然後以 ".bat" 的副檔名儲存即可。你可以根據你要備份的資料檔的路徑和用來備份的媒介﹝如軟碟片、Zip Disk、第二個實體硬碟、硬碟第二個目錄、網絡硬碟[如已與另一部電腦連線]等﹞適當地為你自己度身訂造一個專門備份資料的批次檔﹝首次使用後最好檢查一下檔案是否已成功複製﹞。

(如果你連自己寫批次檔都覺麻煩,這裡有一個簡單的中文界面備份工具或許可考慮。﹞

這個懶人備份方案有以下的優點:
1) 你可以把批次檔拖曳到桌面,每次修改完一個文件後,簡單按一下鍵, 就會替你即時把所有更新過的資料檔備份,很易養成習慣,沒有不備份的藉口。

2) 若你把這個批次檔放入Windows「開始功能表」的「啟動」資料夾內,或與Windows附設的系統工具「安排的工作」(Task Scheduler)一起使用,就可以在每次開機或其他任何預較的時間自動幫你備份,連一下滑鼠鍵也不用按,懶惰指數=100,000,000,000!

這個備份方案有以下的 缺點:

1)如果你用作備份的媒介只是軟碟片,會較受容量的限制,可能需要把大的資料夾分拆開備份﹝特別是微軟的doc檔很佔空間﹞﹝順便一提,在一個無塵、無磁場、防潮和陰涼的環境中,一片軟碟片的壽命一般也不超過五年──因此別把希望寄托在「單一隻」軟碟片上!﹞。但如果你有一部外置Zip Drive/ 網絡硬碟/第二部硬碟,或就算只把檔案複製到硬碟另一個目錄/分割區也好﹝以防止意外地把檔案刪除─這比全不作備份也較好...﹞,這個方案會很方便! (留意Zip專利格式的問題─即一旦生產商消失時找不到支援其「標準」的軟硬體的風險;這方面要給CD-R/RW比下去了...﹞

2)這個方案不適宜備份已安裝的系統檔案和應用程式(這涉及視窗registry裡頭檔案記錄的短檔名和長檔名的關聯問題),否則恐怕回復備份後,會有當機的後果﹝參考:http://www.pcguide.com/art/xcopy.htm ;此外,一個據稱修正了前述 xcopy指令問題的免費軟體 - "xxcopy" - 可在這裡下載)。
--------------------------------------------------------------------------------

附錄:XCOPY 指令的開關制 ( http://www.computerhope.com/xcopyhlp.htm )

XCOPY source [destination] [/a /m] [/d[:date]] [/p] [/s [/e]] [/v] [/w] [/c] [/i] [/q] [/f] [/l] [/h] [/r] [/t] [/u] [/k] [/n] [/y/~y]

source 指定複製檔案。
destination 指定新檔案的位置或名稱。

/a 複製保存屬性的檔案,不變更屬性。
/m 複製保存屬性的檔案,複製後清除保存屬性
/d:m-d-y 複製檔案日期為指定日期或指定日期之後的檔案。若不指定日期,只會複製來源檔案的日期比目標檔案的日期還新的檔案。
/p 建立目標檔案之前顯示提示視窗。
/s 複製目錄及子目錄,但不複製空目錄。
/e 複製目錄及子目錄,也複製空目錄。與 /s /e 相同,通常用來修改 /t。
/v 確認每個新檔案。
/w 進行複製之前顯示提示,您可用按鍵確認執行。
/c 發生錯誤仍繼續進行複製。
/i 如果複製目標不存在,而且您複製多個檔案,就把複製目標設定為目錄。
/q 複製時不顯示檔案名稱。
/f 複製顯示完整的來源名稱及目標名稱。
/l 顯示複製檔案的名稱。
/h 一併複製隱藏檔案及系統檔案。
/r 覆寫唯讀檔案。
/t 建立目錄結構,但不要複製檔案,也不要複製空目錄及空子目錄。 /t /e 表示要複製空目錄及空子目錄。
/u 只複製存在於目的地中的檔案
/k 複製屬性。通常 xcopy 會重設唯讀檔案。
/n 複製時產生短檔名。
/y 覆寫既存檔案前不作提示
/~y覆寫既存檔案前作提示

(其他有關使用xcopy指令的有用資料,可參考 http://www3.sympatico.ca/rhwatson/dos7/z-xcopy.html )

Windows批次檔(Batch File)專用指令

一些Windows批次檔(Batch File)專用指令:

1.rem:批次檔的註解,可增加批次檔的閱讀性,類似Java的單行註解//。

2.echo:將文字輸出於螢幕上,類似Java的System.out.print()。

3.echo on:將批次檔內所下的指令全部顯示在螢幕上。

4.echo off:批次檔內所下的指令全部隱藏,不顯示於螢幕上。

5.goto:轉移控制權,可以指示批次檔跳至某一標記。

6.@:前面加上@符號的指令,執行批次檔時不會將指令文字敘述顯示於螢幕上。

7.%:批次檔參數,最多可以有10個參數值(由%1至%10),於批次檔內類似Java
的main(String[] args)參數用法,%1等於args[0]。

8.pause:暫停批次檔的執行,並在螢幕上顯示Press any key to continue。

9.if exist:檢查某一檔案是否存在,若存在則條件成立,執行指定的命令。例n 1234
@echo off
rem 檔名:test.bat
if exist Test.java javacBatTest.bat
echo Test.java檔案不存在



123456
@echo off
rem 檔名:javacBatTest.bat
javac Test.java
java Test
echo 程式執行完畢
pause



如果Test.java不存在的話,執行test.bat會顯示出Test.java檔案不存在。
如果Test.java存在的話,執行test.bat時便會呼叫javacBatTest.bat,然後
編譯與執行Test.java並將結果顯示於螢幕上。

10.if 字串1==字串2:2字串相等的話,則執行所指定的指令。

11.if not:當測試條件不成立時才執行後面命令。例:
12345
@echo off
rem 檔名:test2.bat
if %OS% == Windows_NT echo 此作業系統為NT架構
if not %OS% == Windows_NT echo 此作業系統非NT架構!
pause



如果執行此BAT的作業系統是NT、2000、XP pro則會顯示"此作業系統為NT
架構",如果為98、Me、XP home則會顯示"此作業系統非NT架構"。

12.if errorlevel:由OS所管理的一個系統變數,目的是監視所有錯誤發
生的情況。

13.call:模組化設計,可用來呼叫另一個批次檔,類似java中method的呼叫。

UNIX Shell Programming-Chap 0 -- 前言

Author: jhhsu
Unix shell - Chap 0 -- 前言 ( UNIX Shell Programming not for guru ...... )
(0.1) 讀者需要那些基礎 ?
這篇文章的主題是 UNIX Shell Programming . 閱讀這篇文章須要一點 基礎 , 包括 : 對 UNIX 的命令要有一點認識 , 尤其是常用 , 重要的命令 . 此外 , 你也必需會在 UNIX 上使用 editor , 像 vi , joe 或
emacs 等 ...... 當然 , 假如你有寫程式的經驗 , 那麼 UNIX Shell Programming 對你來說不過是反掌折枝罷了 .
(0.2) 使用那一種 Shell ? Why ?
既然 Shell 有很多種 , 我們所要介紹是最早由 AT&T Bell Labs 的 Stephen Bourne 所寫的標準 Shell , 也就是所謂的 Bourne Shell . 在一些情況下 , 也會順便提一下 C Shell 相關的東西 . 既然現在已經有了更新更好的 Shell , 那我們為什麼還要介紹 Bourne Shell 呢? 這是因為 , 在 UNIX Shell Programming 中 , 有許多都 還是用 Bourne Shell 的語法寫成的 , 尤其像 /etc/rc.X ( SunOS ) 而一般使用者或許用 C Shell 的增強版 tcsh 或 bash ( Bourne Again Shell ) 這些比較新的 Shell . 不過沒有關係 , 只要系統中有 sh ( Bourne Shell ) 這個直譯器存在 , 那麼 , 我們都可以用 Bourne Shell 的語法來寫程式 . ( 沒有 sh 的系統 , 是很難想像的 ...... ) 還有一點 , 用 sh 來寫程式實際上比用 csh 要好 , 網路上已經有
討論過了 , 很多書也都提到用 csh 寫程式的缺點 , 並建議不要用 csh 來寫程式 . 我個人沒有什麼意見 , sh 與 csh 就好比程式語言 中的 Pascal 與 C (只是比喻) , 想必學過這兩種語言的人都知道 , 只要學會了其中一種 , 另一種也不算太難學 , sh 與 csh 也是一樣 . 況且寫程式能真正作事就可以 , 不需要一下子用 sh , 一下子用 csh 來寫程式 .
*************************************************************
注意 !!!! 所有的例子都要在 Bourne Shell 系列的環境下操作 建議先看看 2.3 , 才不會搞了半天 , 才發覺原來你是用 C Shell 系列的 Shell (Shell 的種類及系列可參考 2.3) 此外 , 文中的一些例子都是在 Linux 下操作 , 在 SunOS 或 HP 上 , 命令也許有少許的不同 . 當你在演練時 , 假如不能正確的 執行 , 你應該看看指令的 manual . 像 SunOS 的 find 與 Linux 的 find 就有差異 . 大部份的例子都可以在各種不同的平臺上執行 .
*************************************************************
(0.3) 本篇文章的架構
本來想用 html 來寫的 , 這樣似乎比較好 , 但是覺得有點麻煩 , 所 以還是用平常的格式來寫 , 各位假如用 joe , 那麼當看到 (參考 x.y) 時 , 你還是可以用 ctrl-k f 來尋找 x.y 的標題 ; 在 vi 下也可以用 /x.y 來尋找 , 這樣也許也可以達到 hypertext 的效果吧 ...... :)
Chap 1 -- 簡介
Chap 2 -- 基本知識
Chap 3 -- Shell Programming 中的資料表示
Chap 4 -- Shell Programming 中的語法
Chap 5 -- 讀取資料及程式偵錯
附錄一 -- Shell Summary 及 一些 Shell Script 的例子
附錄二 -- grep 簡介及 regular expressions
參考資料 -- 介紹一些相關的書及資料
(0.4) 假如你已經對 Bourne Shell Programming 很熟 ...... 那也許附錄一 Shell Summary 會對你有複習及快速參考的好處 ! 還有 , 參考資料中的書目 , 都是值得一看的書 , 假如你還沒看過 , 那我想你可以參考看看 . 當然 , man 及 grep 的配合 , 也常常 可以助你一臂之力 .

這種事不必老闆交代(Please don't just do what I tell you!)

Author: Bob Nelson
0)時時牢記「終極期望」:這種事,不必老闆交代,該做的事就去做!
1)增加工作的困難度,多擔待一些責任
2)想想事情能怎樣改善,每週對自己的工作至少提出兩項建議
3)提出笨問題也沒關係
4)需求就是機會,試著想出至少三種方法解決需求
5)把不知道的事情先學會
6)開發選擇方案,制訂行動計畫
7)把計畫可能出現的破綻一一擊破
8)別人不一定關心你的構想
9)行動-與眾不同就從現在開始
10)大膽發言,創造影響力
11)自願擔負難度較高的工作及上司不敢興趣的交辦事項
12)創意迎接挑戰
13)以積極正面的態度看待問題
14)Plan & action
15)為自己的行動/不採取行動負責
16)堅持到底不輕易放棄
17)遇到阻礙時修正計畫再出發
18)別相信老闆說「隨時找我談談」,尊重上司例行工作時間
19)以不同方法作相同的事
20)學著喜歡做那些別人討厭的事情
21)避免「怪罪遊戲」
22)做的愈多就愈能做