2008年12月29日 星期一

防止ACCESS數據庫被下載

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

把 data.mdb 文件改名為 data.asp 文件後放在wwwroot目錄裏。然後在IE中輸入 data.asp 路徑後,發現 IE 顯示一片空白,右鍵->察看原始碼,跳出記事本,將內容另存為.mdb文件,用ACCESS打開,發現需要密碼, 也就是說至少文件檔頭被破壞。

然後用 Flashget 試驗下載 data.asp 文件,並另存為data.mdb 文件,發現用ACCESS 打開完好無損!看來,一些程式設計人員在開發的時候都認為,改了mdb 副檔名為 asp 就能防下載的概念,是錯的!後臺資料庫被下載對於一個asp+access 的網站來說無疑是一場慘絕人寰的災難。今天找了各方的文章,歸納一下有以下9種辦法防止資料庫被下載(歡迎補充)。

1.發揮你的想像力修改資料庫檔案名稱

不用說,這是最最偷懶的方法,但是若攻擊者通過第三方途徑獲得了資料庫的路徑,就玩完了。比如說攻擊者本來只能拿到 list 權限,結果意外看到了資料庫路徑,就可以冠冕堂皇地把資料庫下載回去研究了。另外,資料文件通常大小都比較大,所以再隱蔽的文件檔案名撐都瞞不了人。故保密性為最低。

2.資料庫名稱副檔名改為ASA、ASP等

此法須配合一些要進行一些設置,否則就會出現本文開頭的那種情況。

(1)二進制字段添加。

(2)在這個文件中加入,IIS就會按ASP語法來解析,然後就會報告500錯誤,自然不能下載了。可是如果只是簡單的在資料庫的文本或者備注字段加入<%是沒用的,因為ACCESS會對其中的內容進行處理,在資料庫裏他會以<%的形式存在,無效!正確的方法是將<%存入 OLE 對象字段裏,這樣我們的目的就能達到了。

操作方法:

首先,用notepad新建一個內容為<%的文本文件,隨便起個名字存檔。

接著,用Access打開您的資料庫文件,新建一個表,隨便起個名字,在表中添加一個OLE對象的字段,然後添加一個記錄,插入之前建立的文本文件,如果操作正確的話,應該可以看到一個新的名為”資料包”的記錄。即可。

3.資料庫檔案名稱前加"#"

只需要把資料庫文件前名加上#、然後修改資料庫連接文件(如conn.asp)中的資料庫地址。原理是下載的時候只能識別# 號前名的部分,對於後面的自動去掉,比如你要下載:http://www.pcdigest.com/date/#123.mdb(假設存在的話)。無論是 IE 還是 FLASHGET 等下到的都是http://www.test.com/date/index.htm (或 index.asp、default.jsp 等你原本在IIS設置的首頁檔名)。

另外在資料庫檔案名稱中保留一些空格也起到類似作用,由於HTTP協議對地址解析的特殊性,空格會被編碼為"%",如 http://www.test.com/date/123;456.mdb,下載的時http://www.test.com/date /123%456.mdb。而我們的目錄就根本沒有123%456.mdb 這個文件,所以下載也是無效的這樣的修改後,即使你暴露了資料庫地址,一般情況下別人也是無法下載!

4.加密資料庫

首先在選取"工具->安全->加密/解密資料庫,選取資料庫(如:employer.mdb),然後接確定,接著會出現 "資料庫加 密後另存為" 的窗口,存為:employer1.mdb。接著employer.mdb就會被編碼,然後存為employer1.mdb..要注意的是,以上的動作並不是對資料庫設置密碼,而只是對資料庫文件加以編碼,目的是為了防止他人使用別的工具來查看資料庫文件的內容。

接下來我們為資料庫加密,首先以打開經過編碼了的 employer1.mdb,在打開時,選擇 "獨佔" 方式。然後選取功能表的 "工具-> 安全->設定資料庫密碼",接著輸入密碼即可。這樣即使他人得到了 employer1.mdb 文件,沒有密碼他是無法看到 employer1.mdb的。

加密後要修改資料庫連接頁,如:

conn.open "driver={ microsoft access driver&nb sp;
(*.mdb) };uid=admin;pwd=資料庫密碼;dbq=資料庫路徑"

這樣修改後,資料庫即使被人下載了,別人也無法打開(前提是你的資料庫連接頁中的密碼沒有被泄露)。
但值得注意的是,由於Access資料庫的加密機制比較簡單,即使設置了密碼,解密也很容易。該資料庫係統通過將用戶輸入的密碼與某一固定密鑰進行"異 或"來形成一個加密串,並將其存儲在 *.mdb 文件從地址 "&H42" 開始的區域內。所以一個好的程序員可以輕松制作一個幾十行的小程序就可以輕鬆地獲得任何Access資料庫的密碼。因此,只要資料庫被下載,其資訊安全依然是個未知數。

5.資料庫放在WEB目錄外或將資料庫連接文件放到其他虛擬目錄下

如你的WEB目錄是e:\webroot,可以把資料庫放到e:\data這個文件夾裏,在e:\webroot裏的資料庫連接頁中修改資料庫連接地址為:"../data/資料庫名"的形式,這樣資料庫可以正常調用,但是無法下載的,因為它不在WEB目錄裏!這個方法一般也不適合購買虛擬空間的用戶。

6.使用ODBC資料源

在ASP等程序設計中,如果有條件,應盡量使用ODBC資料源,不要把資料庫名寫在程序中,否則,資料庫名稱將隨ASP原始碼的失竊而一同失竊,例如:

DBPath = Server.MapPath("../123/ abc/asfadf.mdb ")
conn.open "driver={ Microsoft Access Driver&nb sp;(*.mdb) };dbq="& DBPath

可見,即使資料庫名字起得再怪異,隱藏的目錄再深,ASP原始碼失密後,也很容易被下載下來。如果使用ODBC資料源,就不會存在這樣的問題 了:

conn.open "ODBC-DSN名"

,不過這樣是比較煩的,目錄移動的話又要重新設置資料源了,更方便的方法請看第7,8法!

7.添加資料庫名的如MDB的延伸副檔名對應

這個方法就是通過修改 IIS 設定來實現,適合有 IIS 控制權的朋友,但不適合購買虛擬主機用戶(除非管理員已經設定了)。這個方法我認為是目前最好的,只要修改一處,整個網站的資料庫都可以防止被下載,且無須修改原始碼即使是暴露目標地址也可以防止被下載。

我們在 IIS 屬性-->主目錄-->應用程式設定-->應用程式對應-->新增 那裏添加.mdb文件的應用解析。注意這裏所選擇的DLL(或EXE等) 似乎也不是任意的,選擇不當,這個MDB文件還是可以被下載的,注意最好不要選擇選擇 asp.dll 等。你可以自己多測試下,修改後下載資料庫,就出現 (404或500等錯誤)。

例如在執行檔輸入:c:\windows\system32\inetsrv\ism.dll

        副檔名輸入:.mdb

        限制於:GET,POST

8.使用.net的優越性

動網的木鳥就寫過一個防非法下載文件的"WBAL防盜鏈工具"。

不過那個只實現了防止非本地下載的,沒有起到真正的防下載資料庫的功能。不過這個方法已經跟5法差不多可以通過修改.NET文件,實現本地也不能下載!

這幾個方法中,只有第7和8個是統一性改的,一次修改設定後,整個網站的資料庫都可以防止下載,其他幾個就要分別修改資料庫名稱和連接文件,比較麻煩,不過對於虛擬主機的朋友也只能這樣了!

其實第6個方法應該是第5個方法的延伸,可以實現特殊的功能,但對於不支持.net的主機或者怕設定麻煩的話,還是直接用第5個方法了,而且預設情況下第6個方法,依然可以通過復制連接到同主機的論壇或留言本發表,然後就可以點擊下載了。(因為這樣的引用頁是來自同主機的)

9.利用NTFS磁區的文件權限設置

我們已經知道,ASP.NET中使用ADO.NET訪問資料庫,通過OleDb的連接可以訪問Access資料庫,我們非常常用的低端資料庫 之一。本文討論了ASP.NET中可能看到的若幹錯誤提示,從中看到Access2000和AccessXP創建的資料庫文件,在訪問出現錯誤時會出現不太相同的錯誤提示。希望對大家有所幫助。另一個要點是,希望通過此文,使大家對ASP.NET中Access資料庫文件的NTFS權限設置有所新的認識。

(一)實驗過程

為了敘述方便,舉個具體例子做個實驗:應用程序為/test,資料庫存放在D:\wwwroot\test\data\db1.mdb,我們已 經知道在ASP.NET中是以一個叫做ASPNET虛擬用戶的身份訪問資料庫的,我們需要給這個賬戶以特定的NTFS權限才能使ASP.NET程序正常運 行。

為了得到最嚴格的NTFS權限設置,實驗開始時我們給程序最低的NTFS權限:

a)D:\wwwroot\test\data\文件夾的給用戶ASPNET以如下權限:

允許
拒絕

完全控制

修改

讀取及運行
V

列出文件夾目錄
V

讀取
V

寫入

b) D:\wwwroot\test\data\db1.mdb文件本身給用戶ASPNET以如下權限:

√允許將來自父係的可繼承權限傳播給該對象

1.1:對於某個只包含有"SELECT"命令的aspx程序,上述權限設置運行時無障礙,即:上述權限已經滿足這類程序的運行了。

1.2:對於包含有"UPDATE""INSERT""UPDATE"等命令的aspx程序。

(a)如果db1.mdb是Access2000創建的資料庫,出現如下錯誤:

"/test"應用程序中的服務器錯誤。

MicrosoftJet資料庫引擎打不開文件'D:\wwwroot\test\data\'。它已經被別的用戶以獨佔方式打開,或沒有查看資料的權限。

說明:執行當前Web請求期間,出現未處理的異常。請檢查堆棧跟蹤資訊,以了解有關該錯誤以及原始碼中導致錯誤的出處的詳細資訊。

異常詳細資訊:System.Data.OleDb.OleDbException:MicrosoftJet資料庫引擎打不開文件'D:\wwwroot\test\data\'。它已經被別的用戶以獨佔方式打開,或沒有查看資料的權限。

(b)如果db1.mdb是AccessXP創建的資料庫,出現如下錯誤: "/test"應用程序中的服務器錯誤。

操作必須使用一個可更新的查詢。

說明:執行當前Web請求期間,出現未處理的異常。請檢查堆棧跟蹤資訊,以了解有關該錯誤以及原始碼中導致錯誤的出處的詳細資訊。

異常詳細資訊:System.Data.OleDb.OleDbException:操作必須使用一個可更新的查詢。

(c)原因初步分析:因為包含有"UPDATE""INSERT""UPDATE"等命令,需要對資料庫文件本身進行寫入操作,所以上述權限不能滿足此需求,我們需要進一步放開權限。

我們放開一些權限,

a) D:\wwwroot\test\data\ 文件夾不變;

b) D:\wwwroot\test\data\db1.mdb 文件本身給用戶ASPNET以如下權限;

允許
拒絕

完全控制

修改

讀取及運行
V

列出文件夾目錄
V

讀取
V

寫入
V

1.3:放開權限後繼續實驗

(a)如果db1.mdb是Access2000創建的資料庫,出現如下錯誤: "/test"應用程序中的服務器錯誤。

不能鎖定文件。

說明:執行當前Web請求期間,出現未處理的異常。請檢查堆棧跟蹤資訊,以了解有關該錯誤以及原始碼中導致錯誤的出處的詳細資訊。

異常詳細資訊:System.Data.OleDb.OleDbException:不能鎖定文件。

(b)如果db1.mdb是AccessXP創建的資料庫,沒有出現錯誤。

(c)原因初步分析:我們發現在打開Access資料庫時,同時會在所在目錄生成一個同名的*.ldb文件,這是一個Access的鎖定標記。 鑒於此,我們猜測,用戶ASPNET訪問Access資料庫時,也需要生成一個鎖定標記,而該目錄沒有允許其寫入,因此出錯。至於AccessXP創建的 資料庫為什么沒有這個錯誤,原因還不得而知。

我們進一步放開權限,

a)D:\wwwroot\test\data\文件夾  給用戶ASPNET以如下權限:

允許
拒絕

完全控制

修改

讀取及運行
V

列出文件夾目錄
V

讀取
V

寫入
V

b) D:\wwwroot\test\data\db1.mdb文件本身給用戶ASPNET以如下權限:

√允許將來自父係的可繼承權限傳播給該對象

1.4:繼續實驗,發現錯誤已解決,那么上面這個權限就是我們需要放開的"最低權限"。

(a)如果db1.mdb是Access2000創建的資料庫,我們會發現一個小問題:生成的*.ldb文件不會自己刪除,訪問後該文件依然存在,但這個問題不會影響ASP.NET的正常運行。

(b)如果db1.mdb是AccessXP創建的資料庫,沒有出現上面類似問題。

(c)原因初步分析:我們僅僅是給了ASPNET以寫入文件夾的權限,沒有給它修改的權限,所以文件一旦寫入,便無法修改其內容,*.ldb也就刪除不掉了。

如果非要解決這個問題,進一步放開權限為:

a)D:\wwwroot\test\data\文件夾給用戶ASPNET以如下權限:

允許
拒絕

完全控制

修改
V

讀取及運行
V

列出文件夾目錄
V

讀取
V

寫入
V

b) D:\wwwroot\test\data\db1.mdb 文件本身給用戶ASPNET以如下權限:

√允許將來自父係的可繼承權限傳播給該對象

1.5:附帶著,實驗另一種情形:我們把db1.mdb在Access打開編輯,同時訪問ASP.NET。

(a)如果db1.mdb是Access2000創建的資料庫,我們發現並沒有出現什麼問題。

(b)如果db1.mdb是AccessXP創建的資料庫,出現如下錯誤:&nb。

2008年11月21日 星期五

遠端桌面連線(MMC/TSMMC)

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

有使用過 MMC 的朋友應該都知道它是一個蠻方便的整合管理工具,裡面可以整合許多元件,包括「遠端桌面」;但現在應該有不少網友會說,根本就沒有「遠端桌面」的嵌入元件啊;是的~因為「遠端桌面」的嵌入元件並沒有隨 OS 被安裝進來,它藏身於Windows 2003 的光碟,再加上大多數的一般使用者都用 XP,所以一直沒注意到。

兩個取得的方式:
1.Windows 2003 的光碟中 x:I386ADMINPAK.MSI
2.微軟下載 下載連結安裝完後就可以使用,有兩種啟動方式:

  • 直接在 MMC 中將「遠端桌面」嵌入。
  • 輸入 tsmmc.msc 直接啟動元件。

可管理許多的「遠端桌面連線」設定。

注意!記得要將防火牆的通訊連接埠打開,才能讓「遠端桌面連線」連進來;設預為 port 3389。

遠端桌面連線 - 實用技巧 -

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

【#1】在使用「遠端桌面連線」控制「遠端桌面」時,我們可以發現我們所控制的「遠端桌面」並不是目前真正的遠端「桌面」,而是另外開啟一個使用者的登入程序;那麼要如何才能夠操作遠端目前的「桌面」咧~其實說穿是很簡單的,解答就是 /console 的參數。1.將「遠端桌面」捷徑的內容,改成 %SystemRoot%system32mstsc.exe /console。2.登入時需要和目前遠端上的使用者相同,這樣才可控制該使用者目前的「桌面」。3.此方式需要輸入「帳號、密碼」舉例來說,我習慣為每一部可以被控端建立一個捷徑,可以利用 .bat 或 .cmd 做成的批次檔來建立多個控制檔。我習慣的用法如下:%SystemRoot%system32mstsc.exe /v:192.168.1.100 /console /w:800 /h:600/v:192.168.1.100 提定要遠端電腦的名稱或 ip/console 直接登入即有的桌面作業/w:800 指定畫面寬度/h:600 指定畫面高度 (或直接用 /f 以全螢幕顯示)


【#2】亦或是使用 rdp 檔,就是直接由「遠端桌面連線」儲存的連線檔,但此方法目前無法達到 console 的效果。此方式可以不需要輸入「帳號、密碼」


【#3】像 Windows 2000 等無提供「遠端桌面連線」的 Windows 中,只要下載兩個檔案 mstsc.exe , mstscax.dll 存入同一個資料夾後,執行 mstsc.exe 即可擁有「遠端桌面連線」的功能;換個角度來看 mstsc 是可攜的喔。如何取得 mstsc.exe , mstscax.dll:1.至 M$ 網站下載 MSRDPCLI.EXE 安裝程式即可。2.Windows XP 原版光碟。3.直接在已安裝 Windows XP 的電腦中複製即何。(C:WINDOWSsystem32)


【#4】除了上述利用「捷徑、.bat、.cmd、rdp」的方式來,還可以利用 MMC (Microsoft Management Console) 來整合控管,在 MMC 中有一個嵌入的元件叫「遠端桌面」(tsmmc),只要有它基本上就能夠解決切換還有管理的問題囉

2008年11月7日 星期五

Linux免費備份還原軟體--Clonezilla「再生龍」

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Clonezilla「再生龍」是台灣國家高速網路與計算機中心自由軟體實驗室所開發出來的軟體Penguinzilla(企鵝龍)的一部分。Clonezilla本來是以網路做大量的備份/還原用的(如一次還原整間電腦教室的電腦),後來開發團隊又將功能修改成單機操作,作成免安裝的live CD,這就是Clonezilla Live。
可還原再生多種作業系統,包含Linux (ext2, ext3, ext4, reiserfs, reiser4, xfs, jfs), Mac OS (HFS+), 微軟Windows (fat, ntfs)。這些檔案系統只備份有存資料的硬碟空間,因此可以節省備份時間與硬碟空間。其他不支援的檔案系統Clonezilla採用全部複製(dd)的方式處理。

光碟版(iso檔案)的可以在這裡下載: 穩定版測試版實驗版。下載後,把該ISO檔案燒到光碟片上,就可以用它來開機。

再生龍的安裝與使用:
免安裝的單機版還原系統Clonezilla live(使用CD/USB隨身碟開機)的使用請參考Clonezilla live
適合大量備份與還原的伺服器版再生龍(Clonezilla server edition)(使用PXE網路開機)詳見DRBL

2008年9月19日 星期五

用Google Docs製作「網路問卷調查表」

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

如果你想作一個網路問卷調查表給大家填寫,該怎麼做比較快呢?Google Docs另外提供一個相當簡單、好用的網路問卷調查表,做好之後就不用再到處郵寄Word檔或Excel檔囉,直接把網址給對方,填好之後我們馬上可以在網路上看到填表數、回應內容與簡單的統計唷!

※網址:http://spreadsheets.google.com/newform

如果你想把問卷整個嵌入到網頁或部落格中,可以在預覽時,點選右上角的〔已內嵌〕,並將程式碼貼上到你的部落格或網站中,即可讓大家在你的網站中很方便的填寫問卷。

image

2008年8月21日 星期四

詳解Windows平台上架支援 PHP 的 Apache Server

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl


安裝版本

1. Apache2 2.2.9
2. PHP 5.2.6
3. MySQL 5.0.45
4. phpMyAdmin 2.11.8.1

請準備以上項目的 zip 壓縮版本,而不要用安裝版本,備齊這些資料就可以開始了。
示範平台:Windows XP

一、Apache

只有非官方的 Apache on Windows (Apache2) 才能直接在 Windows 安裝,安裝步驟如下:
1. 請先安裝 Visual C++ 2005 Redistributable Package(2.55MB)
http://www.apachelounge.com/download/vcredist_x86-sp1.exe

2. 將 Apache2 解壓縮到 C:\ (例:C:\Apache2)

3.
開始 > 執行 > 輸入 cmd > 確定
cd\apache2\bin
httpd -k install
httpd -k start
(P.S. httpd -k uninstall 為移除 Apache2 服務)
4. 開啟一個瀏覽器,在網址列輸入 http://localhost 測試,出現「It works!」字樣即為安裝成功。(預設網站資料夾為 C:\Apache2\htdocs)
二、PHP

安裝 PHP

將 PHP 檔案解壓縮到資料夾 C:\php (沒有請新增)
將 php5ts.dll、libmysql.dll copy 到 C:\Apache2\bin
將 php.ini-dist copy 到 C:\apache2 並更名為 php.ini

設定 php.ini

找到 extension_dir = "./" 改成 extension_dir = "C:\php\ext"
找到 ;extension=php_mbstring.dll 改成 extension=php_mbstring.dll
找到 ;extension=php_mysql.dll 改成 extension=php_mysql.dll
找到 ;date.timezone = 改成 date.timezone = "Asia/Taipei"
(如果你不在台灣,請改成你的時區.. )
將 php.ini 存檔後關閉

設定 Apache,以模組方式載入 PHP

開啟 C:\Apache2\conf\httpd.conf

找到 #LoadModule vhost_alias_module modules/mod_vhost_alias.so
在下方加入 LoadModule php5_module "c:/php/php5apache2_2.dll"

找到 AddType application/x-gzip .gz .tgz
在下方加入 AddType application/x-httpd-php .php

找到 DocumentRoot "c:/Apache2/htdocs" ,改成你的網站資料夾
(例 www)DocumentRoot "c:/www"

找到 <Directory "c:/Apache2/htdocs"> ,改成你的網站資料夾
(例 www)<Directory "c:/www">

找到 DirectoryIndex index.html ,改成
DirectoryIndex index.html index.htm index.php

設定 Apache,開啟 rewrite 模組(不需要者可略過)

找到 #LoadModule rewrite_module modules/mod_rewrite.so
改成 LoadModule rewrite_module modules/mod_rewrite.so

搜尋 AllowOverride None (可找到三個結果)
全部改成 AllowOverride All

重新啟動 Apache

開始 > 執行... > 輸入 cmd > 確定
cd\apache2\bin
httpd -k restart

測試 PHP 環境

請在你的網站資料夾裡新建檔案 phpinfo.php ,內容只有一行如下:

<?php phpinfo() ?>

開啟一個瀏覽器,並在網址列輸入 http://localhost/phpinfo.php
如果有出現 php 相關訊息就代表安裝成功了。

三、MySQL

安裝 MySQL

將 MySQL 檔案解壓縮到 C:\ 並將資料夾 mysql-5.0.37-winx64 更名為 mysql,
(例C:\mysql)

依下列程序安裝 MySQL 服務
開始 > 搜尋列
輸入 C:\mysql\bin\mysqld -install 按確定

MySQL 講座(懂了就可以跳過,請確認 MySQL 已啟動)

一般在 WindowsNT/2000/XP/Vista,MySQL需要安裝成為一個系統服務。
你可以在以下程序看到 MySQL 服務。
我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上點兩下(如果沒有找到代表你安裝不成功)
啟用類型: 自動.. 服務狀態: 已啟動 才是正常,如果不是請設定成這樣。經過此設定後,MySQL 服務將會在你每次開機後自行啟動。

如果要移除 MySQL 服務,請作以下動作
先停止 MySQL 服務,我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上點兩下
啟用類型: 自動.. 服務狀態: 已停止,設定成這樣。
開始 > 執行
輸入 C:\mysql\bin\mysqld -remove 按確定
需注意,若沒有這個動作自行刪除 MySQL 檔案,這裡的 MySQL 服務就會變成無法移除了!

設定 MySQL 編碼
在 C:\WINDOWS\ 之下建立檔案 my.ini ,設定 MySQL 預設編碼為 UTF-8 (或其他)
my.ini

[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8

重新啟動 MySQL
我的電腦上按右鍵選管理
服務及應用程式 > 服務
在 MySQL 上按右鍵 > 重新啟動
四、phpMyAdmin

安裝 phpMyAdmin

將 phpMyAdmin 檔案解壓縮到 (你的網站資料夾)\phpmyadmin,
(例C:\www\phpmyadmin)

設定 phpMyAdmin

開啟 phpMyAdmin\libraries 資料夾中的 config.default.php
找到 $cfg['PmaAbsoluteUri'] = ''; 改成
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin/';
(設定 phpMyAdmin 的絕對路徑)

測試 phpMyAdmin

開一個新的瀏覽器,並在網址列輸入 http://localhost/phpmyadmin/index.php有畫面的話,就是代表安裝成功了。

Apache 安裝設定教學

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

官方網站:http://www.apache.org/
安裝步驟
  1. 下載並執行 Apache HTTP Server 2.2.9
  2. 安裝精靈起始(Installation Wizard)畫面:
    • 直接按 Next。
  3. 使用許可協議(License Agreement)畫面:
    • 點選 I accept the terms in the license agreement。
    • 按 Next。
  4. 讀我檔案(Read This First)畫面:
    • 直接按 Next。
  5. 伺服器資訊設定(Server Information)畫面:
    • Network Domain 與 Server Name 請依照實際情況填寫,若不知道可填 localhost。
    • Administrator's Email Address 則是填自己的 Email 信箱。
    • 按 Next。
  6. 安裝類型選擇(Setup Type)畫面:
    • 點選 Custom。
    • 按 Next。
  7. 自訂安裝元件選擇(Custom Setup)畫面:
    • 直接按 Next。
  8. 安裝確認(Ready to Install the Program)畫面:
    • 直接按 Install。
  9. 安裝完成(Installation Wizard Completed)畫面:
    • 按 Finish。
    • 安裝成功。
設定步驟

可將右下角小時鐘旁的Apache Monitor小圖示關閉,不影響伺服器運作。

httpd.conf 設定

用記事本開啟 C:\Program Files\Apache Group\Apache2\conf\httpd.conf,並按照以下原則進行修改。

請自行以關鍵字尋找並取代預設設定,若沒有預設設定則新增在檔案最後面即可。

強調的部分請依實際情況修改。

請注意斜線(/)與反斜線(\)的不同,以免造成不必要的錯誤。

設定完成後必須重新啟動伺服器以套用新的設定。

  • 網頁目錄及權限設定

    設定說明:

    • 以 D:\www 目錄作為網頁存放路徑。
    • 若目錄中沒有索引頁(index.html等),則傳回 403 Forbidden,不會列出目錄中檔案。
    DocumentRoot "D:/www"
    <Directory />
    Options None
    AllowOverride FileInfo
    Order allow,deny
    Allow from all
    </Directory>


    另外,建議以<Directory</Directory>為關鍵字,搜尋並將不相關的目錄設定標記起來,使其沒有作用。




  • 索引頁檔名設定

    設定說明:




    • 依次以index.html與index.xml為首頁檔名。



    DirectoryIndex index.html index.xml



  • 錯誤頁面設定

    設定說明:




    • 在發生 403 Forbidden 與 404 Not Found 時,以 /error/*error.php 的內容取代錯誤訊息。



    ErrorDocument 403 /error/403error.php
    ErrorDocument 404 /error/404error.php



  • 使用 mod_deflate 增進傳輸效能設定

    設定說明:




    • 在瀏覽器可以接受的情況下,傳送壓縮過的內容以增進傳輸效率,但會增加伺服器負擔。


    • DeflateCompressionLevel 設定壓縮等級。


    • AddOutputFilterByType 根據 MIME Type 設定要壓縮的檔案類型。


    • AddOutputFilter 根據副檔名設定要壓縮的檔案類型。



    LoadModule deflate_module modules/mod_deflate.so
    <ifmodule mod_deflate.c>
    DeflateCompressionLevel 9
    AddOutputFilterByType DEFLATE text/html text/xml text/css application/x-httpd-php
    AddOutputFilter DEFLATE html htm xml php css
    </ifmodule>


2008年7月29日 星期二

完整版-資料備份精靈 Ver 2.04

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

FileBackupPro

  • 資料備份精靈程式說明:

資料備份精靈是一套全中文介面的檔案備份工具,完全免費讓大家使用,非常適用在個人工作室以及公司行號的電腦資料備份,軟體可以設定備份的時間,時間一到自動備份您的資料,並且可以指定您所要備份的類型,您不至於備份到您不想備份的檔案,相當的方便,無限的備份清單,不管硬碟上有多少檔案,都可以完整的備份,以及區域網路端備份... 等等,簡單的使用者介面,輕鬆上手,備份不求人,不管是我的最愛‧以重要的 Outlook Express 郵件等等,都可以備份起來。

雖然資料備份精靈在功能上比不上收費軟體,但是在使用上絕對符合一般使用者的需求。

  • 資料備份精靈的相關功能如下:

0) 全新的備份核心,除了強化備份速度之外,正在使用的檔案也可以備份(壓縮備份除外)。
1) 可以自動每分鐘、每小時、每天、每週、每月定時備份檔案。
2) 完整的區域網路備份,備份方式為:

近端 ←→ 遠端
遠端 ←→ 近端
遠端 ←→ 遠端
PS:遠端備份僅限於「區域網路」內

3) 內建檔案壓縮功能,備份檔案格式為 7-ZIP 壓縮格式(7-ZIP / WinRAR 3.5 以上均支援)。
4) 可以指定不壓縮 (最快)、快速壓縮以及最大壓縮 (最耗時) 的壓縮範圍可供選擇。
5) 可以指定壓縮時是否加入密碼保護(若忘記密碼我也沒法度解決喔!)。
6) 可以指定不想備份的日期,從星期一至星期天都可自由指定。
7) 可以指定檔案 / 資料夾排除功能,本軟體有內定數個系統資料夾與檔案的排除專案。
8) 內建完整、遞增、同步、壓縮備份功能。
9) 可限制備份檔案大小,降低備份時所花費的時間。
10) 副檔名編輯功能,除了本軟體內建之外,還可自行增加。
11) 備份專案匯入/匯出功能。
12) 簡單的備份專案還原功能。
13) 詳細的備份日誌檢視功能,可知道到底備份多少檔案。
14) 內建數個備份專案,可備份我的最愛、電子郵件 ... 等等。
15) 檔案刪除可決定是否要將刪除的檔案移到資源回收筒內。
17) 支援新版作業系統 Windows Vista 32 位元,但不支援 64 位元喔。
18) 支援 Jazz 及 Zip、USB 行動碟、USB 硬碟等外接裝置的備份。
19) 支援 Unicode 檔案、資料夾備份。
20) 程式不用安裝,所有程式不超過 400K,解壓縮後就可以使用,無須擾人的 OCX 元件。

  • 系統需求:

作業系統 :Windows 2000/XP/2003/Vista 32 位元
中央處理器:Intel Pentium III 500 MHz 以上處理器。
記憶體 :64 MB 以上,建議使用 256 MB 或更高。
硬碟 :1 MB 之安裝空間。
螢幕解析度:800*600、1024*768(建議)

原始出處-紅淚網

原始著作下載點 ( 中華電信)
鏡像下載點 ( 台灣 FTP 聯盟 )

監控程序的小工具-Magic Process

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

MagicProcess

MagicProcess提供詳細的應用程式清單、監控程式的運作,藉此可用來判斷病毒或者後門程式,與 Windows 的工作管理員大致上是差不多的軟體管理工具。
主要的功能有:
1.可以列出所有應用程序以及程序中所使用的相關模組,用滑鼠雙擊該程式就可以觀看。
2.可以結束所有應用程式、包含作業系統所載入的核心程式。
3.可以修改所有應用程式的優先順序。
4.可以結束應用程序並且刪除您所終止的應用程式檔案。
5.可以監控應用程式的所有一切動作,有助於您的分析與判斷是否為病毒或後門程式。
6.可以利用滑鼠右鍵來選擇已經存在的應用程式、模組的相關資訊,以及資料夾的所在地。
7.可以排除使用者所指定的應用程式,可避免病毒作怪。
8.可以觀看應用程式所使用的網路連線,有助於您的分析與判斷是否為病毒或後門程式。
9.可以中斷指定應用程式的網路連線。
10.可以觀看已經開啟的任何視窗,與 Windows 大致上是一樣的功能。
11.可以觀看 CPU 的使用率(支援雙核心),與 Windows 工作管理員常駐列是完全相同的。
12.程式相關屬性都可以利用 Google、Yahoo、Msn 搜尋相關的資訊。
13.可以釋放應用程式的記憶體。
14.內建數十個 Windows 系統內建的系統工具程式。
15.無須 OCX 等擾人的控制元件,程式不到 150 KB。
16.支援 Unicode。
17.支援 Windows 2000/XP/2003/Vista。

原著作下載點 (中華電信)
鏡像下載點 ( 台灣 FTP 聯盟 )

原始出處-紅淚網

2008年7月8日 星期二

網頁認證的方式.htaccess使用技巧

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

.htaccess 網頁認證的方式,是以目錄為一個驗證的節點,凡要經過此目錄才能瀏覽的網頁,

皆需要透過 .htaccess 的驗證之後才可以存取。

舉例:

我有一個學術單位的網頁,網址為 http://sparc.nfu.edu.tw/~test/test/

是要讓大家都可以來瀏覽的;不過我有一些比較機密性的文件,僅可以提供某些特定的人來瀏覽,

於是這些機密性的文件我都將它放置到網頁根目錄底下的 admin目錄當中,

如今我要讓來存取網址為 http://sparc.nfu.edu.tw/~test/admin/(任何檔案)

都需要透過驗證才能夠瀏覽,我可以這麼做:

步驟1.建立 .htaccess

在 admin 目錄中,建立一個 .htaccess 的檔案,

.htaccess 的檔案內容為 :

AuthName "Admin Login"

AuthUserFile /home1/test/.passwd

AuthType Basic

require valid-user

各欄位的意義:

1. AuthName "Admin Login"

用來設定如下紅色方框內的文字

123

2. AuthUserFile /home1/test/.passwd

AuthUserFile 用來設定給 .htaccess 驗證時,要使用的帳號密碼資料的位置,

需使用絕對路徑的方式來設定。

/home1/test/.passwd 帳號密碼資料檔,是由我們自行產生的(在 步驟2 會說明)。

3. AuthType Basic

認證的類型;我們使用 Apache 預設的類型,Basic就可以了

4. require valid-user

讓密碼檔內的使用者都能夠登入(即上面AuthUserFile所指定的檔案)

步驟2. 產生帳號密碼檔

利用 htpasswd 指令來幫我們產生帳號密碼檔

語法:htpasswd [ 參數 ] < 帳號密碼檔 > < 要新建的登入帳號 >

1. 若現在我要新建一個登入帳號 為 test

而這個時候 /home1/test/.passwd 帳號密碼檔

還不存在,則我需要輸入下列指令:

htpasswd –c /home1/test/.passwd test

(-c 參數用來產生帳號密碼檔 )

基於安全性上的考量,帳號密碼檔 請勿放置在WWW目錄內(含WWW以下目錄中),

建議使用者可將帳號密碼檔放置在 使用者家目錄 即可。

輸入完之後,它會請您輸入此使用者 test 的密碼,輸入完,

便會產生 /home1/test/.passwd 帳號密碼檔案,

並且在 /home1/test/.passwd 檔案裡面您會看到 test 這個帳號,

與其加密過後的密碼。

(需特別注意的是,如果 /home1/test/.passwd 已經存在的話,

請不要再使用 –c 參數,因為它會覆蓋掉原本/home1/test/.passwd

的內容,只留下我們此次建立的帳號資料 )

2. 如果現在我要再新建一個登入帳號 為 admin,

而這個時候 /home1/test/.passwd 已經存在,

則我只需要輸入下列指令,

htpasswd /home1/test/.passwd admin

然後它依然會請您輸入此使用者的密碼,輸入完畢後,

/home1/test/.passwd 就會看到,

您剛剛新建的使用者帳號及密碼的資料了。

經過 步驟1 與 步驟2 的設定之後,

只要有人要來瀏覽我的 http://sparc.nfu.edu.tw/~test/admin/(任何檔案)

就必須要輸入帳號密碼,此時只要輸入在 步驟2 所建立的帳號密碼,就可以登入了。

-------------------------------------------------------------------------------

現在有了一個更方便的工具,那就是 .htaccess 檔案產生器(htaccess Generator)透過網頁的勾選與設定,在按下 Generator .htaccess File 後便可以得到一個 htaccess 檔,非常方便。

【網站網址】http://cooletips.de/htaccess/

2008年6月25日 星期三

SQL 資料庫災難復原 (使用 Binary Log)

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

當 MySQL Server 因為各種無法預期的原因而損毀(Crash)的時候,你就必須要進行災難復原。若是您有做好定期的資料庫備份那麼災難還原的時候應該會輕鬆很多,只要將備份起來的資料還原回去即可,但光是這樣子還是會造成部份資料的遺失,例如 "現在" 至 "最後一次備份" 之間的資料,這時我們可以透過 MySQL 提供的 Binary Log 機制將可能遺失的資料降至最低。
Binary Log 的運作原理很簡單,它只是單純的將所有會修改到資料庫內容的操作記錄在 Log 檔案中,然後透過這個 Binary Log 你就可以重新執行所有會修改到資料庫內容的操作。例如若你最後一次備份的時間是 1/1 AM 0:00 ,並且有啟用 Binary Log 功能記錄 1/1 AM 0:00 這個時間點以後所有會修改到資料庫內容的操作,假設你的 MySQL Server 在 1/2 AM 10:00 故障,你就可以將 1/1 AM 0:00 備份的資料還原回去,然後利用 Binary Log 將 1/1 AM 0:00 ~ 1/2 AM 10:00 之間所有的操作重新執行一次,這樣子一來你就可以將資料庫還原到當機的那個時間點。
使用 Binary Log 進行災難復原的步驟:

  1. 啟用 Binary Log
  2. 使用 mysqlbinlog 將 Binary Log 轉換成可執行的 SQL 指令

在接下來的文章中會使用的範例與假設:
  1. 最後一次備份的時間點為 1/1 AM 0:00
  2. MySQL Server 在 1/2 AM 10:00 故障

一、啟用 Binary Log

修改 MySQL Server 的系統設定檔(eg. /etc/my.cnf),在 [mysqld] 區塊中加上 log-bin=mysql-bin 選項,然後重新啟動 MySQL Server,例如:

引用:

[mysqld]
log-bin=mysql-bin

啟用後你應該可以在 MySQL 的 Data Dir 裡面發現如下的檔案:

mysql-bin.index
mysql-bin.000001
mysql-bin.000002
...............
mysql-bin.00000X

MySQL 在以下幾種情況會進行 lograrote:
  1. 執行 Flush Logs 指令
  2. MySQL Server 重新啟動
  3. 設定檔中有進行額外的設定

註:
請注意,當您使用 mysqldump 進行資料庫備份時請記得加上 --flush-logs 選項,例如:

引用:

mysqldump --flush-logs -u root -p 資料庫名稱 > example.sql

這麼做的目的是在備份時讓 MySQL Server 進行 logrotate,這樣子日後要辨別 "最後一次備份時間點" 之後的 Binary Log 會比較方便,因為若你沒有主動(或透過設定)去刪除 Binary Log,則只要你的硬碟空間夠大,MySQL 會無限期的保存 Binary Log,也就是說你的 Binary Log 裡面所記載的資料有可能包含 "最後一次備份時間點" 之前的資料。


二、使用 mysqlbinlog 將 Binary Log 轉換成可執行的 SQL 指令

Binary Log 是無法被 MySQL Server 直接執行、也無法直接以人眼去閱讀的,必須要先使用 MySQL 所提供的 mysqlbinlog 程式,將 Binary Log 轉換為 MySQL Server 可以執行的 SQL 指令。mysqlbinlog 的語法如下:

引用:

mysqlbinlog -H --set-charset="utf8" --start-datatime="2007-01-01 00:00:00" --stop-datatime="2007-01-02 10:00:00" mysql-bin.[0-9]* > example.sql

-H:Display a hex dump of the log in comments.
--set-charset:設定編碼
--start-datatime:要轉換的開始時間點
--stop-datatime:要轉換的結束時間點
mysql-bin.[0-9]*:這裡要注意的是,要一次處理所有的 Binary Log,因為儲存在 Binary Log 中的資料有可能會 "跨檔案",例如從 mysql-bin.000001 的結尾接到 mysql-bin.000002 的開頭。
example.sql:轉換出來的文字檔的檔案名稱,這個名稱可以自已取。
需要加 -H 選項的原因如下:

引用:

mysqlbinlog didn't escape the string content of user variables, and did not deal well when these variables were in non-ASCII character sets; this is now fixed by always printing the string content of user variables in hexadecimal. The character set and collation of the string is now also printed. (Bug #3875)


實際執行轉換後的 Binary Log

很簡單,只要一行簡單的指令:

引用:

mysql < example.sql

如果沒有什麼錯誤訊息發生,那麼只要等它執行完就大功告成了。話又說回來,要是執行失敗呢?這是有可能的。MySQL 在處理 Binary Log 時有一些 Bug 存在,它的 Bug Report 似乎是說在最新版本的 MySQL Server 中已修正此 Bug,我沒有實際測試過所以不清楚,但若是你和我一樣也遇到這個 Bug 的話,也不用太擔心。這些問題其實不難解決,自己 Workaround 即可。
目前我看到的情況有:

  1. Comment 沒有正確標示
  2. Comment 語法錯誤
  3. 不正確的使用 DELIMITER
  4. 奇怪的 STOP 指令(我不太確定這是做什麼用的)

自己用 sed 去修改轉換過後的 example.sql 即可。

引用:

sed -f replace.rules example.sql > final.sql

replace.rules檔案的內容:

引用:

s/\(Query.*thread\)/#\1/g
s/\(###.*###\)//g
s/DELIMITER ;//g
s/Stop//g

上面幾行的意義:
s/\(Query.*thread\)/#\1/g


MySQL 的 Binary Log 在處理 Comment 的時候,有的時候會漏加 "#" 符號在 Comment Line 的最前面。例如本來是:

引用:

Query thread_id=227528 exec_time=- error_code=0

要改成:

引用:

#Query thread_id=227528 exec_time=- error_code=0


s/\(###.*###\)//g

在某些 SQL statement(例如 REPLACE INTO search)的最後面會有一些 Comment 存在,但這些 Comment 的語法不正確反而會造成執行失敗,故刪除之。
類似以下的行都應該刪除:

引用:

### Bitfield: user.options ###
### SAVE ORDERED IDS TO SEARCH CACHE ###

........等等


s/DELIMITER ;//g

刪除不正確的 DELIMITER 指令,像以下這樣就是不正確的:

引用:

DELIMITER ;


s/Stop//g
有的時候會在 Binary Log 中出現 Stop 這個指令而導致執行失敗,故刪除之。但我不太確定這個 Stop 指令實質上的用途是什麼。

使用 mysqldump備份 DB

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

[MySQL] 使用 mysqldump備份 DB

mysqldump 做備份,如果要儘可能把完整的資料匯出,可以加上 --single-transaction,備份前 mysqldump 會先執行 BEGIN ,取得 READ LOCK 後,便能確定資料在執行 mysqldump 的過程中不會受到其它連線存取的干擾,也能 Dump 出較完整的資料。(使用此參數需有 READ LOCK 權限)

mysqldump --single-transaction --all-databases > all_db.sql

注意:
1.表單較大時可以加上 --quick
2.MySQL Cluster 不支援 --single-transaction

然而使用 --single-transaction 時最好搭配 --flush-logs--master-data 來維持 Binary Log 的完整性。(使用這二個參數皆需有 RELOAD 權限)

mysqldump --single-transaction --flush-logs --master-data --all-databases > all_db.sql

Binary Log 採用的是遞增備份,--flush-logs 便是把目前的 Binary Log 給 flush 出來 (若目前 MASTER_LOG_FILE 已經到 mysql-bin.000005,產生出來的檔案便是 mysql-bin.000006),完成之後才進行 Dump 的作業。

而 --master-data (預設值為1) 則是在 Dump 出來的 SQL 語法中加入下面這一行,以記錄目前 Dump 的時間點。

CHANGE MASTER TO MASTER_LOG_FILE=mysql-bin.000006',MASTER_LOG_POS=4;

如果在未來執行匯入時 SQL 語法時, MySQL 便能很清楚的知道這次 Dump 出來的 SQL 在 Binary Log 中是屬於哪個位置。

註: 若不需理會 Binary Log 的位置時 (例如進行完整備份作業),只要將 --master-data 設為 2 便會將 CHANGE MASTER 給註解起來純供參考用。

免費Blog架站軟體

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

網路上有很多免費的Blog可以用,但是總是不夠客製化,版面也都侷限於BSP所提供的面版,就算會CSS、HTML等語法,但總是綁手綁腳的,加上每個BSP提供的功能又不同,所以總是有些不便,若各位想要讓你的Blog更炫、更與眾不同,那可以試試下面幾套優質的Blog架站軟體,若你有覺得其他好的架站軟體,也歡迎推薦!!

  1. Movable Type (第三屆年度網誌獎獲選為年度最佳網誌出版工具 (best web application for weblogs))
    中文文件說明:Ultimate Handbook or Movable Type 文件集
  2. WordPress中文 WordPress
  3. LifeType
  4. Bo-Blog :對岸的架站軟體,在文章、人氣的統計做的不錯,可以簡繁轉換(plugin),功能頗多
  5. TatterTools :簡稱為TT,有繁體中文的論壇,功能越加越多,也蠻方便使用的。
  6. F2Blog:有繁、簡、英三個網頁版本,於2006.5.12日正式成立開發小組,有提供Plugin及Skin。
  7. Simple PHP Blog:(SPHPBlog)最大的特點是不需要資料庫,使用純文字檔案儲存內容,程式輕巧安裝簡單,基本功能如RSS Feeds,留言,文章分類,Trackback,防Spam,圖片上傳,佈景配色等均有。

2008年6月23日 星期一

Phtrain手機台鐵高鐵時刻生成器

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Phtain

對於常改點的台鐵,記不住新時刻嗎?「Phtrain」網站,提供台鐵與高鐵時刻表,搜尋到新時刻

,再將時刻表以圖片形式下載存入手機,即可不必花任何手機上網費,就帶著時刻表趴趴走

,無形中也省下不少紙張。

多種圖片格式提供不怕你的手機太挑剔,Phtrain提供多樣的圖片格式,一定滿足你的手機。

方便又省時有了Phtrain,你就可以隨時隨地,在手機上觀看時刻表,不用在浪費時間等待。

官網 : http://tw.nfair.net/phtrain/index.php

2008年6月21日 星期六

Mozilla Firefox 3.0 - Final繁體中文(安裝+免安裝)

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Mozilla Firefox是一個自由的,開放源碼的瀏覽器,適用於Windows, Linux 和 MacOS X平台.
它還有其它一些高級特徵,如標籤式瀏覽,可以禁止彈出式窗口.內置了釣魚保護、改變標籤瀏覽行為、能夠重新打開以外關閉的標籤、更好的支持網頁訂 閱的預覽和訂閱、拼寫檢查、支持JavaScript 1.7等.
Mozilla Firefox 3的最新版本,Firefox 3旨在改進內存操作、性能和穩定性,改進XUL和新核心組件等。

Firefox 3 logo

免安裝下載Mozilla Firefox 3.0 Portable.rar (8.21 MB)

http://www.mediafire.com/?mtwdgzodhzi

官方45國語言安裝版下載

http://www.mozilla.com/en-US/firefox/all.html

2008年6月18日 星期三

免費pdf轉檔工具-PrimoPDF

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

相信很多人在提交報告或發表論文時,都會發生一個狀況,,如何將您的文件轉成 PDF 格式寄給對方單位?事實上可以產生 PDF 檔案的方法很多,除了可以使用免費的Adobe 線上 PDF 轉檔服務外,也可以購買 Adobe Acrobat 軟體來處理;不過在經費有限的情況下,您也可以選擇免費又好用的 Primo PDF 來幫忙您完成這個簡單的工作!

image002

步驟一:下載 Primo PDF

b_download_primo

步驟二:安裝 Primo PDF

步驟三:開啟一份 Word 文件

步驟四:點選「檔案」→ 「列印」

步驟五:印表機選擇「Primo PDF」

image008

步驟六:當 Primo PDF 視窗出現後,請選擇您要的輸出設定
Screen:一般螢幕顯示使用 ( 檔案小 )
Print:列印輸出時使用 ( 檔案大 )
EBook:電子書模式 ( 檔案小 )
Prepress:印刷輸出使用 ( 檔案大 )

image010

步驟七: 在 Security 的選項裡可以設定開啟密碼以及允許列印,修改文件的設定 … 來保護您的文件資料

 image012

步驟八:若您有設定密碼, 列印輸出後開啟文件時,會自動啟動密碼保護

image014

步驟九:開啟完成輸出後的 PDF 文件,就可以看到您精心製作的 PDF 文件了

2008年6月13日 星期五

FreeGrab 繁體中文+教學

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

FreeGrab 是一個下載網路相簿及一些免費檔案空間、線上影片的下載器,如軟體網站上寫的『自訂腳本的多用下載器,適合下載免空、相簿、超市、影音網站......』,其中在論壇上網友常用的免費檔案空間 Badongo 在下載時只要將網址貼上,免輸入識別碼就可以下載檔案,因此當有多個檔案要下載時使用 FreeGrab 管理檔案下載相當的方便;幾乎所有常見的分享影片網站 Youtube 或 im.tv 等等、圖片相簿、檔案空間的網站都有腳本支援下載。

※註 FreeGrab仍舊是免費程式

壓縮檔:(已包含主程式與dll以及一些常用模組)

1.2.3.4.5 (已含132個模組)(08/05/18)

教學網站~~~在這

2008年6月11日 星期三

MySQL Big5轉utf8及亂碼問題解決

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

1、MySQL 新版的變化:
MySQL 4.1 以後對多語言的支持有了很大變化 (這也導致了許多問題的出現);儘管大部分的地方,MySQL 3 仍然占主導地位;但 MySQL 4.1 是 MySQL 官方推薦的數據庫,(截自目前MySQL己出到了5.2.2),已經有主機提供商開始提供並將會越來越多; 許多 PHP 程序以 MySQL 作為默認的數據庫管理軟件,但它們一般不區分 MySQL 4.1 以上與 4.1 以下版本的區別,籠統地稱「MySQL 3.xx.xx 以上版本」就滿足安裝需求了; 因為 latin1 在許多地方 (下邊會詳細描述具體是哪些地方) 作為默認的字符集,成功的蒙蔽了許多 PHP 程序的開發者和用戶,掩蓋了在中文等語言環境下會出現的問題;簡單的說,MySQL 自身的變化和使用 MySQL 的 PHP 程序對此忽略,導致了問題的出現和複雜化,而由於大部分用戶使用的是英文,使得這種問題不被重視。但在中文環境使用下因而產生了許多的問題。
2、MySQL 4.1 字符集支持的原理:
MySQL 4.1 對於字符集的指定可以細化到一台機器上安裝的 MySQL,其中的一個數據庫,其中的一張表,其中的一欄,應該用什麼字符集。但是,傳統的 Web 程序在創建數據庫和數據表時並沒有使用那麼複雜的配置,它們用的是默認的配置,那麼,默認的配置從何而來呢?
編譯 MySQL 時,指定了一個默認的字符集,這個字符集是 latin1;
安裝 MySQL 時,可以在配置文件 (my.ini) 中指定一個默認的的字符集,如果沒指定,這個值繼承自編譯時指定的;
啟動 mysqld 時,可以在命令行參數中指定一個默認的的字符集,如果沒指定,這個值繼承自配置文件中的;
此時 character_set_server 被設定為這個默認的字符集;
當創建一個新的數據庫時,除非明確指定,這個數據庫的字符集被缺省設定為 character_set_server;
當選定了一個數據庫時,character_set_database 被設定為這個數據庫默認的字符集;
在這個數據庫裡創建一張表時,表默認的字符集被設定為character_set_database,也就是這個數據庫默認的字符集;
當在表內設置一欄時,除非明確指定,否則此欄缺省的字符集就是表默認的字符集;
這個字符集就是數據庫中實際存儲數據採用的字符集,mysqldump 出來的內容就是這個字符集下的;
簡單的總結一下,如果什麼地方都不修改,那麼所有的數據庫的所有表的所有欄位的都用 latin1 存儲,不過我們如果安裝 MySQL,一般都會選擇多語言支持,也就是說,安裝程序會自動在配置文件中把 default_character_set 設置為 UTF-8,這保證了缺省情況下,所有的數據庫的所有表的所有欄位的都用 UTF-8 存儲。
當一個 PHP 程序與 MySQL 建立連接後,這個程序發送給 MySQL 的數據採用的是什麼字符集?MySQL 無從得知 (它最多只能猜測),所以 MySQL 4.1 要求客戶端必須指定這個字符集,也就是 character_set_client,MySQL 的怪異之處在於,得到的這個字符集並不立即轉換為存儲在數據庫中的那個字符集,而是先轉換為 character_set_connection 變量指定的一個字符集;這個 connection 層究竟有什麼用我不大明白,但轉換為 character_set_connection 的這個字符集之後,還要轉換為數據庫默認的字符集,也就是說要經過兩次轉換;當這個數據被輸出時,又要由數據庫默認的字符集轉換為 character_set_results 指定的字符集。
以一個典型的環境為例,電腦上安裝著 Apache 2,PHP 5 和 WordPress 1.5.1.3,MySQL 配置文件中指定了 default_character_set 為 utf8。於是問題出現了:
WordPress 按照默認情況安裝,所以所有的表都用 UTF-8 存儲數據;
WordPress 默認採用的瀏覽字符集是 UTF-8 (Options->Reading 中設置),因此所有 WP 頁面的 meta 中會說明 charset 是 utf-8;
所以瀏覽器會以 utf-8 方式顯示所有的 WP 頁面;這樣一來 Write 的所有 Post,和 Comment 都會以 UTF-8 格式從瀏覽器發送給 Apache,再由 Apache 交給 PHP;
所以 WP 從所有的表單中得到的數據都是 utf-8 編碼的;WP 不加轉換的直接把這些數據發送給 MySQL;
MySQL 默認設置的 character_set_client 和 character_set_connection 都是 latin1,此時怪異的事情發生了,實際上是 utf-8 格式的數據,被「當作 latin1」轉換成……居然還是轉換成 latin1,然後再由這個 latin1 轉換成 utf-8,這麼兩次轉換,有一部分 utf-8 的字符就丟失了,變成 ??,最後輸出的時候 character_set_results 默認是 latin1,也就輸出為奇怪的東西了。
3、PHP 程序與 MySQL 建立連接:
所以為了解決這些問題,在PHP 程序與 MySQL 建立連接時,於query 之前先執行:
SET character_set_client='utf8'
SET character_set_connection='utf8'
SET character_set_results='utf8'
如上三列編碼都一樣時,可寫成 SET NAMES 'utf8'
上面3個變量的作用是這樣的,client表示客戶端發送過來的字符集,results表示發送到客戶端的字符集(這兩個分開是因為發送過來和發送過去的不一定是同一個客戶端),connection則在客戶端和數據庫起一個連接作用。
如果是租用網路伺服器,首先測試服務器MySQL資料庫是否 >= 4.1,編譯時是否加入了 UTF-8 支持;然後測試數據庫以什麼格式存儲 ($dbEncoding);
SET NAMES $dbEncoding 。
4、MySQL資料庫big5轉utf8:
步驟一:首先把資料dump出來
由於先前用4.0時我的資料是存成latin1,所以dump出來後要用iconf或piconf把他轉成UTF-8,記得dump出來時要加上-default-character-set=latin1
#mysqldump -u帳號 -p -default-character-set=latin1 資料庫 >output.sql
步驟二:big5轉成utf8
如果原先是Big5的資料, dump出來後就直接把Big5轉成UTF-8即可
#piconv -f big5 -t utf8 output.sql >utf8.sql
如果原先是UTF-8的資料,像是wordpress,dump出來後要先轉成Big5後,再把他轉成UTF-8,因為原先dump出來的是偽裝成UTF-8的lantin1不是真正的UTF-8
#mysqldump -u帳號 -p -default-character-set=latin1 資料庫 >output.sql
#piconv -f utf8 -t big5 output.sql > big5.sql
#piconv -f big5 -t utf8 big5.sql >utf8.sql
步驟三:修改sql檔
1、修改轉成的sql檔中所產生的‘’\"及換行
的問題(有時換行時會成‘\n’)
2、在dump出來的sql檔最前面加上:
SET NAMES utf8;
SET CHARACTER_SET_CLIENT=utf8;
SET CHARACTER_SET_RESULTS=utf8;
再來把每個資料表後面的TYPE=MyISAM;
改成ENGINE=MyISAM DEFAULT CHARSET=utf8;
步驟四:建立新的資料庫
方法1. SQL語法
CREATE DATABASE `abc` DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
方法2. 用phpMyAdmin建立資料庫的,建立時”校對”要選utf8_general_ci
步驟五:import資料
方法1. SQL語法
#mysql -u帳號 -p 資料庫 < utf8.sql
方法2. 直接用phpMyAdmin把他import進去了,import時記得文字編碼檔案要選utf8即可。不過使用phpMyAdmin import 有檔案大小的限制,可先把sql檔分成幾個檔案。
方法3.用Webmin  import (我即是用此方法,如滙入不成功還可知在那一行的sql出問題,因有時在轉成utf8時有些因‘許功蓋’會產生一些‘\’)
最後記得檢查看MySQL的my.cnf設定檔內要加入以下設定
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci

2008年6月10日 星期二

iPhone二代機(3G)Apple

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Apple蘋果電腦推出的iPhone手機,今天再度在全球引爆話題,去年開賣引發搶購熱潮的iPhone,今天公佈第二代iPhone 3G手機,不但速度更快、功能更多,價格更是一次下殺5折只要199美金,相當於6千元台幣,在全球不景氣下,iPhone的這個低價策略,果然在手機市場,引爆一顆震撼彈。

由蘋果執行長賈伯斯親自介紹iphone 3G( iPhone 2 )功能及價格..真是太令人動心
賈伯斯,在美國舊金山正式發表iPhone第二代手機;新的iPhone分黑色和白色,不但多了3G功能,上網速度更快,此外還有衛星導航,電池也標榜更持久。
iPhone特別宣布要大降價。賈伯斯:我很高興要告訴你們,iPhone 3G手機只賣us 199

在簡報中談到iPhone 3G於7月11日上市時,將會有以下22個國家,同步上市:澳洲、澳地利、比利時、加拿大、丹麥、芬蘭、法國、德國、香港、愛爾蘭、義大利、日本、墨西哥、荷蘭、紐西蘭、挪威、葡萄牙、西班牙、瑞典、瑞士、英國與美國。在美國,8GB僅售199元,16GB僅售299元的行銷模式,將綁約兩年。此外,在年內還會再增加48個國家,總合70國。but....70個國家當中居然沒有台灣,真是......,連香港、非洲部分國家都有了。


2008年6月9日 星期一

Gozee 免費的網站評分工具

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Gozee 是一個免費的網站評分工具,成績分別由「A+A+A+」到「DDD」也提供了網站外部誰是top5連結來參訪你的web。

gozee_logo.JPG

Google Ads 廣告預覽

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

這個名為 Adsense Sandbox - Google Adsense Preview Tool Online 的工具能讓你預覽你的部落格或某個關鍵字在不同的國家會顯示出什麼廣告,除了可以查詢文字廣告、Adlink、圖片廣告外,更包括了 Video 和 Flash 廣告。

google-adsense-sandbox-tool.png

adsensepvbox.png

AdsensePVBox 提供線上 Adsense 預覽功能,目前共有繁體、簡体中文、英文、日文四種語言。輸入任何網站的網址URL或者關鍵字(例如paris hilton), 選擇國家(可選),送出之後將可看見依照地理位置所顯示的Google Adsense上下文廣告。

與sandbox介面很相像..(感覺是把他弄成各國語言介面)

查詢IP位址,查詢IP國家國別,ISP來源,經緯度

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

IP-Address.com 可以查詢全球的IP地址,並且精確定位到該IP的國家、城市、經緯度、ISP服務商,

並使用 Google Maps 定位到地圖上的實際地理位置,非常方便。

image

http://dir.twseo.org/ip-check.php

http://ipid.shat.net/

http://checkrealip.com/

上面三個網站也都提供對外ip查詢功能

2008年5月20日 星期二

MathType 6 數學公式編輯器+教學

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl


MathType套裝軟體是美國Design Science公司推出,Microsoft Office內的方程式編輯就是向該公司買版權作為外掛程式,
所以 MathType 軟體可以說是Office內方程式編輯器的強化版,具有完整的功能。
MathType (for Windows & Mac)是一套功能強大徹底改善您對於文件或網頁上編輯數學符號的時間與方式。
MathType可使用於各類文字編輯器、投影片軟體、排版軟體、網頁編輯程式,讓使用者輕鬆在研究論文、教材、網頁、投影片、期刊和書籍中建立數學符號。


■ MathType是專業版的方程式編輯器
如果您熟悉MathType在Microsoft Office、AppleWorks 或其他產品的應用,那麼您一定會激賞本軟體的額外功能。
本軟體超越許多軟體內建的方程式編輯器,讓您建立更大型的數學方程式與文件,協助您更有效率的工作。
透過MathType與Microsoft Word的完美結互,可以讓Microsoft Word成為一套最佳的數學文字編輯器和網頁面編輯程式。


■ MathPage︰ 革新技術讓你呈現數學在網頁之中
MathType 包括新的MathPage技術,讓使用者將包含方程式的整份Word文件轉換成網頁,
因此使用者可以在Windows、Macintosh、Unix或者Linux 瀏覽器中完美呈現或列印—目前沒有其他產品或者技術能產生更好的結果或更容易使用。


MathType快鍵補充


1﹒放大或縮小尺寸
Ctrl+1(100%);
Ctrl+2(200%);
Ctrl+4(400%);
Ctrl+8(800%)。
2﹒在數學公式中插入一些符號
Ctrl+9 或 Ctrl+0(小括號);
Ctrl+[ 或 Ctrl+](中括號);
Ctrl+{ 或 Ctrl+}(大括號);
Ctrl+F(分式);
Ctrl+/(斜杠分式);
Ctrl+H(上標);
Ctrl+L(下標);
Ctrl+I(積分號);
Ctrl+R(根式);
Ctrl+Shift+連字元(上橫線);
Ctrl+Alt+連字元(向量箭頭);
Ctrl+Alt+'(單撇);
Ctrl+Alt+"(雙撇);
先按“Ctrl+T”放開後,再按 N(n次根式)、S(求和符號)、P(乘積符號)等。
3﹒微移間隔
先利用“Shift+方向鍵”選取要移動的公式,再用“Ctrl+方向鍵”配合操作即可實現上、下、左、右的平移;用“Ctrl+Alt+空格”鍵可適當增加空格。
4﹒元素間的跳轉
每一步完成後轉向下一步(如輸入分子後轉向分母的輸入等)可用Tab鍵(或用→鍵),換行用Enter鍵。


5.刪除的方式是右擊工具圖示,選擇“刪除”命令即可。
※添加常用公式
MathType的一大特色就是可以自己添加或刪除一些常用公式,添加的辦法是:先輸入我們要添加的公式,然後選中該公式,用滑鼠左鍵拖到工具列中適當位置即可。


2008年5月12日 星期一

防火牆 PC Tools Firewall 3.0 free 繁中

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

Comodo Firewall跟PC Tools Firewall,比較起來是PC Tools比較好用'因為Comodo會跳出很多詢問視窗,還會吃CPU的佔用率,這都要靠爬文跟設定才能解決
太麻煩了,而且你開BT的軟體,按了允許還是連不到外網,都要自己去設定,更累人相反的,PC Tools就沒上面這些問題,介面清爽、佔用的資源也少、而且不用設定在防火牆的評比中,能力大概是中等,但是一般使用者就夠用了,已經比SP2內建強太多

PC Tools Firewall Plus是一套功能強大且免費的 Windows® 個人版防火牆軟體,可用來保護您的電腦,避免未經授權使用者透過網際網路或網路存取您的電腦。Firewall Plus監控連接到網路的應用程式,能防止木馬、后門、鍵盤監控和其他惡意程式破壞電腦、竊取私人訊息。

PC Tools Firewall Plus是以進階技術為一般使用者特別設計的軟體,專業人員也適合使用。您可按默認設置啟動應對攻擊和已知漏洞的強有力防護措施,有經驗的用戶也可自行創建高級過濾規則──包括IPv6支持──來定製網路保護措施。您只需安裝該軟體,即可獲得即時、自動的防護。

PC Tools Firewall Plus擁有世界級防護能力,還有一般的智慧型更新、即時防護與完整的網路隔離功能加持,可確保您的電腦安全,不會讓駭客入侵。PC Tools 產品備受信賴,每天有數百萬用戶使用在家用和商用電腦上,以應對在線威脅。

我們推薦捆綁使用PC Tools Firewall Plus和Spyware Doctor來獲得針對間諜程式、廣告程式和其他威脅的全面系統防護。

PC Tools Firewall Plus主要特點

  • 在工作、上網和玩遊戲時保護您的電腦。
  • 智能自動防護,無需回答各種問題。
  • 既是為新手也是為專家設計,易於使用。
  • 高級規則保護您的電腦免遭常見的攻擊。
  • 最佳特點是︰它是免費的,沒有陷阱、功能限制或時間限制。

目前版本: 3.0.1.14
發布: 西元2008年04月07日
大小: 6,558 KB
平台: 專為 Windows® Vista™ 32-bit, XP, 2000 and 2003 伺服器而設

下載點

2008年4月30日 星期三

什麼是MD5? 程式碼比對

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

如何利用MD5這個好用的東西來檢查檔案完整性唷^^

  1. 下載 WinMD5Sum
  2. 用拖曳的方式,將要測定MD5碼的檔案,拖到WinMD5Sum上面。
  3. 完成後會如下圖,紅色框選處的,就是MD5核對碼啦!!
    attachments/200705/7210384898.jpg
  4. 比對發佈者所提供的MD5核對碼,相同就是對的,不相同,就怪怪的啦!!
    (您也可以用這個方法來提供別人MD5核對碼來確認唷^^)
    attachments/200705/8066162645.jpg
  5. 比對結果
    若出現左圖,表示與比對欄裡的MD5碼吻合。
    若出現右圖,檔案可能是壞掉了,也有可能是被竄改過了…

attachments/200705/9209956873.jpgattachments/200705/1963863498.jpg

不同大小的檔案,算出來的 MD5 Checksum 碼,一定會不一樣,即使檔案大小一樣,但內容不一樣,算出來的 MD5 Checksum 碼也不一樣。
利用這種特性,我們只要利用軟體,算出 MD5 Checksum 碼再和原作者提供的比對,就可以知道檔案有沒有被偷改過了。

下載md5工具內含 : Nero MD5 Verifier WinMD5 MD5 檢查碼

2008年4月23日 星期三

WWW截圖工具-Super Screenshot!

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

super-screenshot.gif

Super Screenshot 是個相當實用的工具網站,進入首頁後輸入欲截圖的網站網址,按下 Go 並等到幾秒鐘,Super Screenshot 就能將該網站抓圖為圖片。

除了提供完整網站截圖、還有僅抓取螢幕上方的模式(Top Screen),並有五種圖片尺寸、兩種圖片格式(jpg/png)可以使用。

免費網路相簿 free web ablum

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

精選6種網路相簿幾個不錯的免費相簿跟大家分享。

  • 4images

官方網站:
http://www.4homepages.de/
這是老牌子的網路相簿了。

  • 35mm Slide Gallery

官方網站:
http://www.andymack.com/freescripts/
很精緻的網路相簿,比較適合小量相簿展示的使用者。

  • Coppermine Photo

官方網站:
http://coppermine.sourceforge.net/
很 phpBB 的網路相本,有完整的相簿分類及開放其它使用者上傳、對相片留言等功能。除了有多國語言之外,也常常被包成 phpBB 或是 pMachine之類的軟體做為相本的外掛,高度的程式整合性就是他最大的優點囉

  • Gallery

官方網站:
http://gallery.menalto.com/
有多國語言,台灣也很多人用喔,還可以針對相片做留言,功能算是很強。但是畫面太簡潔了,雖然可說是可塑性大,但還得花點時間自己改好看一點。

  • Singapore

官方網站:
http://singapore.sourceforge.net/
非常漂亮簡單的相簿,安裝簡單,而且可以自訂樣版,缺點是無中文語系。

  • JAlbum

官方網站:
http://jalbum.net/
不需要懂網頁設計,將圖選好,樣本指定好,輸出,就能產生美麗的網頁相本,缺點更新就麻煩了,再輸出一遍吧!支援多國語言。

2008年4月21日 星期一

VMWARE快速教學

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

新增 Virtual Machine
我們需要在 VMware Workstation 內新增一台「虛擬機器 - Virtual Machine」,才可以在這台新增的虛擬機器內安裝 OS。

開啟 VMware Workstation 點選「New Virtual Machine

點選〔下一步

點選「Typical」,使用預設值來設定 Virtial Machine 即可
註:想要進階設定的人可以點選「Custom

選取要在虛擬機器內安裝的作業系統類型:請如圖設定
註:在虛擬機器 - Virtual Machine 內安裝的作業系統,VMware 把它叫做「Guest Operating System」,
而 VMware 把安裝 VMware Workstation 的 Windows XP 叫做「Host Operating System」
Host Operating System:安裝 VMware Workstation 的 OS 叫做 Host Operating System,在這裡就是指 Windows XP
Guest Operating System:安裝在 VMware Workstation 新增的 Virtual Machine 內的 OS 叫做 Guest Operating System

接下來皆是 下一步...狂按

新增 Virtual Machine 成功之後在左邊的「Favorites」欄位就會出現剛剛建立的虛擬機器,
現在在右邊的 CD-ROM 圖示上快擊兩下開啟它
image
勾選「Use ISO image」,再點選〔Browse〕,選取你要安裝的「win2003.iso或其它的.iso」,這樣我們就可以直接使用 ISO 映像檔來安裝作業系統,連光碟都不用燒錄了

*如果你是使用CD或DVD安裝OS請選取 AUTO detect 系統會幫你找到OS光碟位置*

點選上方的 開機鈕, 這台虛擬機器就會開機了
一些按鈕的說明:
:關機(Power Off)
:暫停(Suspend)
:開機(Power On)
:重置(Reset)
:製作快照。這是很好用的功能,就是為虛擬機器建立一個還原點,隨時可以還原,這樣我們就可以為所欲為任意測試了,不過最好是在虛擬機器關機的時候製作
:還原快照
:隱藏左方我的最愛目錄
:全螢幕模式。變成全螢幕之後,要還原請按 Ctrl + Alt
:快速切換模式

記住一點~想進入虛擬螢幕就將滑鼠朝螢幕點一下就可以進入
想退出虛擬螢幕只需按 "Ctrl+Alt"即可退出

vmware 進階電子書教學下載

http://www.box.net/shared/7p9vgj9c04

BAT批次檔案語法(下)

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

注意:choice命令為DOS或者Windows系統提供的外部命令,不同版本的choice命令語法會稍有不同,請用choice /?查看用法。

choice的命令語法(該語法為Windows 2003中choice命令的語法,其他版本的choice的命令語法與此大同小異):

CHOICE [/C choices] [/N] [/CS] [/T timeout /D choice] [/M text]

描述:
該工具允許用戶從選擇列表選擇一個專案並返回所選項目的索引。

參數列表:
/C choices 指定要創建的選項列表。默認列表是 "YN"。

/N 在提示符中隱藏選項列表。提示前面的消息得到顯示,
選項依舊處於啟用狀態。

/CS 允許選擇分大小寫的選項。在默認情況下,這個工具
是不分大小寫的。

/T timeout 做出默認選擇之前,暫停的秒數。可接受的值是從 0
到 9999。如果指定了 0,就不會有暫停,默認選項
會得到選擇。

/D choice 在 nnnn 秒之後指定默認選項。字元必須在用 /C 選
項指定的一組選擇中; 同時,必須用 /T 指定 nnnn。

/M text 指定提示之前要顯示的消息。如果沒有指定,工具只
顯示提示。

/? 顯示幫助消息。

注意:
ERRORLEVEL 環境變數被設定為從選擇集選擇的鍵索引。列出的第一個選
擇返回 1,第二個選擇返回 2,等等。如果用戶按的鍵不是有效的選擇,
該工具會發出警告響聲。如果該工具檢測到錯誤狀態,它會返回 255 的
ERRORLEVEL 值。如果用戶按 Ctrl+Break 或 Ctrl+C 鍵,該工具會返回 0
的 ERRORLEVEL 值。在一個批程式中使用 ERRORLEVEL 參數時,將參數降
序排列。

示例:
CHOICE /?
CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
CHOICE /T 10 /C ync /CS /D y
CHOICE /C ab /M "選項 1 請選擇 a,選項 2 請選擇 b。"
CHOICE /C ab /N /M "選項 1 請選擇 a,選項 2 請選擇 b。"

==== willsort 編注 ===============================
我列出win98下choice的用法説明, 已資區分

Waits for the user to choose one of a set of choices.
等待用戶選擇一組待選字元中的一個

CHOICE [/C[:]choices] [/N] [/S] [/T[:]c,nn] [text]

/C[:]choices Specifies allowable keys. Default is YN
指定允許的按鍵(待選字元), 默認為YN
/N Do not display choices and ? at end of prompt string.
不顯示提示字串中的問號和待選字元
/S Treat choice keys as case sensitive.
處理待選字元時大小寫敏感
/T[:]c,nn Default choice to c after nn seconds
在 nn 秒後默認選擇 c
text Prompt string to display
要顯示的提示字串
ERRORLEVEL is set to offset of key user presses in choices.
ERRORLEVEL 被設定為用戶鍵入的字元在待選字元中的偏移值
如果我執行命令:CHOICE /C YNC /M "確認請按 Y,否請按 N,或者取消請按 C。"
螢幕上會顯示:
確認請按 Y,否請按 N,或者取消請按 C。 [Y,N,C]?

例:test.bat的內容如下(注意,用if errorlevel判斷返回值時,要按返回值從高到低排列):
@echo off
choice /C dme /M "defrag,mem,end"
if errorlevel 3 goto end
if errorlevel 2 goto mem
if errorlevel 1 goto defrag

:defrag
c:\dos\defrag
goto end

:mem
mem
goto end

:end
echo good bye

此批次處理執行後,將顯示"defrag,mem,end[D,M,E]?" ,用戶可選擇d m e ,然後if語句根據用戶的選擇作出判斷,d表示執行標號為defrag的程式段,m表示執行標號為mem的程式段,e表示執行標號為end的程式段,每個程式段最後都以goto end將程式跳到end標號處,然後程式將顯示good bye,批次處理執行結束。

四、for 迴圈命令,只要條件符合,它將多次執行同一命令。

語法:
對一組檔中的每一個檔執行某個特定命令。

FOR %%variable IN (set) DO command [command-parameters]

%%variable 指定一個單一字母可替換的參數。
(set) 指定一個或一組檔。可以使用通配符。
command 指定對每個檔執行的命令。
command-parameters
為特定命令指定參數或命令行開關。

例如一個批次檔案中有一行:
for %%c in (*.bat *.txt) do type %%c

則該命令行會顯示當前目錄下所有以bat和txt為副檔名的檔的內容。

==== willsort 編注 =====================================================
需要指出的是, 當()中的字串並非單個或多個檔案名時, 它將單純被當作字串替換, 這個特性再加上()中可以嵌入多個字串的特性, 很明顯 for 可以被看作一種遍曆型迴圈.
當然, 在 nt/2000/xp/2003 系列的命令行環境中, for 被賦予了更多的特性, 使之可以分析命令輸出或者檔中的字串, 也有很多開關被用於擴展了檔替換功能.
========================================================================

批次處理示例

1. IF-EXIST

1) 首先用記事本在C:\建立一個test1.bat批次檔案,檔內容如下:
@echo off
IF EXIST \AUTOEXEC.BAT TYPE \AUTOEXEC.BAT
IF NOT EXIST \AUTOEXEC.BAT ECHO \AUTOEXEC.BAT does not exist

然後執行它:
C:\>TEST1.BAT

如果C:\存在AUTOEXEC.BAT檔,那麼它的內容就會被顯示出來,如果不存在,批次處理就會提示你該檔不存在。

2) 接著再建立一個test2.bat檔,內容如下:
@ECHO OFF
IF EXIST \%1 TYPE \%1
IF NOT EXIST \%1 ECHO \%1 does not exist

執行:
C:\>TEST2 AUTOEXEC.BAT
該命令執行結果同上。

說明:
(1) IF EXIST 是用來測試檔是否存在的,格式為
IF EXIST [路徑+檔案名] 命令
(2) test2.bat檔中的%1是參數,DOS允許傳遞9個批參數資訊給批次檔案,分別為%1~%9(%0表示test2命令本身) ,這有點象編程中的實參和形參的關係,%1是形參,AUTOEXEC.BAT是實參。

==== willsort 編注 =====================================================
DOS沒有 "允許傳遞9個批參數資訊" 的限制, 參數的個數只會受到命令行長度和所調用命令處理能力的限制. 但是, 我們在批次處理程式中, 在同一時刻只能同時引用10個參數, 因為 DOS只給出了 %0~%9這十個參數引用符.
========================================================================

3) 更進一步的,建立一個名為TEST3.BAT的檔,內容如下:
@echo off
IF "%1" == "A" ECHO XIAO
IF "%2" == "B" ECHO TIAN
IF "%3" == "C" ECHO XIN

如果執行:
C:\>TEST3 A B C
螢幕上會顯示:
XIAO
TIAN
XIN

如果執行:
C:\>TEST3 A B
螢幕上會顯示
XIAO
TIAN

在這個命令執行過程中,DOS會將一個空字串指定給參數%3。

2、IF-ERRORLEVEL

建立TEST4.BAT,內容如下:
@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 1 ECHO 檔拷貝失敗
IF ERRORLEVEL 0 ECHO 成功拷貝檔

然後執行檔:
C:\>TEST4

如果檔拷貝成功,螢幕就會顯示"成功拷貝檔",否則就會顯示"檔拷貝失敗"。

IF ERRORLEVEL 是用來測試它的上一個DOS命令的返回值的,注意只是上一個命令的返回值,而且返回值必須依照從大到小次序順序判斷。
因此下面的批次檔案是錯誤的:

@ECHO OFF
XCOPY C:\AUTOEXEC.BAT D:\
IF ERRORLEVEL 0 ECHO 成功拷貝檔
IF ERRORLEVEL 1 ECHO 未找到拷貝檔
IF ERRORLEVEL 2 ECHO 用戶通過ctrl-c中止拷貝操作
IF ERRORLEVEL 3 ECHO 預置錯誤阻止檔拷貝操作
IF ERRORLEVEL 4 ECHO 拷貝過程中寫盤錯誤

無論拷貝是否成功,後面的:

未找到拷貝檔
用戶通過ctrl-c中止拷貝操作
預置錯誤阻止檔拷貝操作
拷貝過程中寫盤錯誤

都將顯示出來。

以下就是幾個常用命令的返回值及其代表的意義:

backup
0 備份成功
1 未找到備份檔案
2 檔共用衝突阻止備份完成
3 用戶用ctrl-c中止備份
4 由於致命的錯誤使備份操作中止

diskcomp
0 盤比較相同
1 盤比較不同
2 用戶通過ctrl-c中止比較操作
3 由於致命的錯誤使比較操作中止
4 預置錯誤中止比較

diskcopy
0 盤拷貝操作成功
1 非致命盤讀/寫錯
2 用戶通過ctrl-c結束拷貝操作
3 因致命的處理錯誤使盤拷貝中止
4 預置錯誤阻止拷貝操作

format
0 格式化成功
3 用戶通過ctrl-c中止格式化處理
4 因致命的處理錯誤使格式化中止
5 在提示"proceed with format(y/n)?"下用戶鍵入n結束

xcopy
0 成功拷貝檔
1 未找到拷貝檔
2 用戶通過ctrl-c中止拷貝操作
4 預置錯誤阻止檔拷貝操作
5 拷貝過程中寫盤錯誤

chkdsk
0 未找到錯誤
255 找到一個或多個錯誤

choice
0 用戶按下ctrl+c/break
1 用戶按下第一個鍵
255 檢測到命令行中的錯誤條件
其他 用戶按下的有效字元在列表中的位置

defrag
0 碎片壓縮成功
1 出現內部錯誤
2 磁片上沒有空簇。要執行DEFRAG,至少要有一個空簇
3 用戶用Ctrl+C退出了DEFRAG
4 出現一般性錯誤
5 DEFRAG在讀簇時遇到錯誤
6 DEFRAG在寫簇時遇到錯誤
7 分配空間有錯
8 記憶體錯
9 沒有足夠空間來壓縮磁片碎片

deltree
0 成功地刪除一個目錄

diskcomp
0 兩盤相同
1 發現不同
2 按CTRL+C 終止了比較
3 出現嚴重錯誤
4 出現初始化錯誤

find
0 查找成功且至少找到了一個匹配的字串
1 查找成功但沒找到匹配的字串
2 查找中出現了錯誤

keyb
0 鍵盤定義檔裝入成功
1 使用了非法的鍵盤代碼,字元集或語法
2 鍵盤定義檔壞或未找到
4 鍵盤、監視器通訊時出錯
5 要求的字元集未準備好

move
0 成功地移動了指定的檔
1 發生了錯誤

msav /N
86 檢查到了病毒

replace
0 REPLACE成功地替換或加入了文件
1 MS-DOS版本和REPLACE不相容
2 REPLACE找不到原始檔案
3 REPLACE找不到源路徑或目標路徑
5 不能存取要替換的檔
8 記憶體不夠無法執行REPLACE
11 命令行句法錯誤

restore
0 RESTORE成功地恢復了檔
1 RESTORE找不到要恢復的檔
3 用戶按CTRL+C終止恢復過程
4 RESTORE因錯誤而終止

scandisk
0 ScanDisk在它檢查的驅動器上未檢測到任何錯誤
1 由於命令行的語法不對,不能執行ScanDisk
2 由於記憶體用盡或發生內部錯誤,ScanDisk意外終止
3 用戶讓ScanDisk中途退出
4 進行盤面掃描時,用戶決定提前退出
254 ScanDisk找到磁片故障並已全部校正
255 ScanDisk找到磁片故障,但未能全部校正

setver
0 SETVER成功地完成了任務
1 用戶指定了一個無效的命令開關
2 用戶指定了一個非法的檔案名
3 沒有足夠的系統記憶體來執行命令
4 用戶指定了一個非法的版本號格式
5 SETVER在版本表中未找到指定的項
6 SETVER未找到SETVER.EXE文件
7 用戶指定了一個非法的驅動器
8 用戶指定了太多的命令行參數
9 SETVER檢測到丟失了命令行參數
10 在讀SETVER.EXE檔時,SETVER檢測到發生錯誤
11 SETVER.EXE文件損壞
12 指定的SETVER.EXE檔不支援版本表
13 版本表中沒有足夠的空間存放新的項
14 在寫SETVER.EXE檔時SETVER檢測到發生錯誤
========================================================================

3、IF STRING1 == STRING2

建立TEST5.BAT,檔內容如下:
@echo off
IF "%1" == "A" FORMAT A:

執行:
C:\>TEST5 A
螢幕上就出現是否將A:盤格式化的內容。

注意:為了防止參數為空的情況,一般會將字串用雙引號(或者其他符號,注意不能使用保留符號)括起來。
如:if [%1]==[A] 或者 if %1*==A*

5、GOTO

建立TEST6.BAT,檔內容如下:
@ECHO OFF
IF EXIST C:\AUTOEXEC.BAT GOTO _COPY
GOTO _DONE
:_COPY
COPY C:\AUTOEXEC.BAT D:\
:_DONE

注意:
(1) 標號前是ASCII字元的冒號":",冒號與標號之間不能有空格。
(2) 標號的命名規則與檔案名的命名規則相同。
(3) DOS支援最長八位元字元的標號,當無法區別兩個標號時,將跳轉至最近的一個標號。

==== willsort 編注 =====================================================
1)標號也稱作標籤(label)
2)標籤不能以大多數的非字母數位字元開始, 而檔案名中則可以使用很多
3)當無法區別兩個標籤時, 將跳轉至位置最靠前的標籤
========================================================================

6、FOR

建立C:\TEST7.BAT,檔內容如下:
@ECHO OFF
FOR %%C IN (*.BAT *.TXT *.SYS) DO TYPE %%C

執行:
C:\>TEST7

執行以後,螢幕上會將C:盤根目錄下所有以BAT、TXT、SYS為副檔名的檔內容顯示出來(不包括隱藏檔)。

BAT批次檔案語法(上)

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

副檔名是bat(在nt/2000/xp/2003下也可以是cmd)的檔就是批次檔案。

==== 注 =======================================
.bat是dos下的批次檔案
.cmd是nt內核命令行環境的另一種批次檔案
從更廣義的角度來看,unix的shell腳本以及其他作業系統甚至應用程式中由外殼進行解釋執行的文本,都具有與批次檔案十分相似的作用,而且同樣是由專用解釋器以行為單位解釋執行,這種文本形式更通用的稱謂是腳本語言。所以從某個程度分析,batch, unix shell, awk, basic, perl 等腳本語言都是一樣的,只不過應用的範圍和解釋的平臺各有不同而已。甚至有些應用程式仍然沿用批次處理這一稱呼,而其內容和副檔名與dos的批次處理卻又完全不同。
===================================

首先批次檔案是一個文字檔案,這個檔的每一行都是一條DOS命令(大部分時候就好象我們在DOS提示符下執行的命令行一樣),你可以使用DOS下的Edit或者Windows的記事本(notepad)等任何文字檔案編輯工具創建和修改批次檔案。

==== 注 ===================
批次檔案中完全可以使用非dos命令,甚至可以使用不具有可執行特性的普通資料性檔,這緣於windows系統這個新型解釋平臺的涉入,使得批次處理的應用越來越"邊緣化"。所以我們討論的批次處理應該限定在dos環境或者命令行環境中,否則很多觀念和設定都需要做比較大的變動。
========================

其次,批次檔案是一種簡單的程式,可以通過條件語句(if)和流程控制語句(goto)來控制命令執行的流程,在批次處理中也可以使用迴圈語句(for)來迴圈執行一條命令。當然,批次檔案的編程能力與C語言等編程語句比起來是十分有限的,也是十分不規範的。批次處理的程式語句就是一條條的DOS命令(包括內部命令和外部命令),而批次處理的能力主要取決於你所使用的命令。

==== 注 ==================
批次檔案(batch file)也可以稱之為批次處理程式(batch program),這一點與編譯型語言有所不同,就c語言來說,副檔名為c或者cpp的檔可以稱之為c語言檔或者c語言源代碼,但只有編譯連接後的exe檔才可以稱之為c語言程式。因為批次檔案本身既具有文本的可讀性,又具有程式的可執行性,這些稱謂的界限是比較模糊的。
===========================

第三,每個編寫好的批次檔案都相當於一個DOS的外部命令,你可以把它所在的目錄放到你的DOS搜索路徑(path)中來使得它可以在任意位置執行。一個良好的習慣是在硬碟上建立一個bat或者batch目錄(例如C:\BATCH),然後將所有你編寫的批次檔案放到該目錄中,這樣只要在path中設定上c:\batch,你就可以在任意位置執行所有你編寫的批次處理程式。

==== 注 =====
純以dos系統而言,可執行程式大約可以細分為五類,依照執行優先順序由高到低排列分別是:DOSKEY巨集命令(預先駐留記憶體),COMMAND.COM中的內部命令(根據記憶體的環境隨時進駐記憶體),以com為副檔名的可執行程式(由command.com 直接載入記憶體),以exe位元副檔名的可執行程式(由command.com 重定位後載入記憶體),以bat位元副檔名的批次處理程式(由command.com 解釋分析,根據其內容按優先順序順序調用第2,3,4,5種可執行程式,分析一行,執行一行,檔本身不載入記憶體)
============

第四,在DOS和Win9x/Me系統下,C:盤根目錄下的AUTOEXEC.BAT批次檔案是自動執行批次檔案,每次系統啟動時會自動執行該檔,你可以將系統每次啟動時都要執行的命令放入該檔中,例如設定搜索路徑,調入滑鼠驅動和磁片緩存,設定系統環境變數等。下麵是一個執行於Windows 98下的autoexec.bat的示例:
@ECHO OFF
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;C:\UCDOS;C:\DOSTools;

C:\SYSTOOLS;C:\WINTOOLS;C:\BATCH
LH SMARTDRV.EXE /X
LH DOSKEY.COM /insert
LH CTMOUSE.EXE
SET TEMP=D:\TEMP
SET TMP=D:\TEMP
==== 注 =====
AUTOEXEC.BAT為DOS系統的自動執行批次檔案,由COMMAND.COM啟動時解釋執行;
而在Win9x環境中,不僅增加支持了 DOSSTART.BAT, WINSTART.BAT 等許多其他自動執行的批次檔案,對AUTOEXEC.BAT 也增加了 .DOS .W40 .BAK .OLD .PWS 等許多變體以適應複雜的環境和多變的需求。
==== willsort 編注 =============
以下關於命令的分類,有很多值得推敲的地方。常用命令中的@本不是命令,而dir、copy等也很常用的命令卻沒有列入, 而特殊命令中所有命令對我來說都是常用命令。建議將批次處理所引用的命令分為內部命令、外部命令、第三方程式三類。而內部命令和外部命令中別有一類是專用於或常用於批次處理中的命令可稱之為"批次處理命令"。

以下摘錄MS-DOS 6.22 幫助文檔中關於"批次處理命令"的文字,當然,其中有些概念和定義已經有些落後了。

批次處理命令

批次檔案或批次處理程式是一個包含若干MS-DOS命令的正文檔,副檔名為.BAT。當在命令提示符下敲入批次處理程式的名稱時,MS-DOS成組執行此批次處理程式中的命令。

任何在命令提示符下可使用的命令都可用在批次處理程式中。此外,下面MS-DOS命令是專門在批次處理程式中使用的。
==========

常用命令

echo、@、call、pause、rem(小技巧:用::代替rem)是批次檔案最常用的幾個命令,我們就從他們開始學起。

==== 注 ===========
首先, @ 不是一個命令, 而是DOS 批次處理的一個特殊標記符, 僅用於遮罩命令行回顯. 下面是DOS命令行或批次處理中可能會見到的一些特殊標記符:
CR(0D) 命令行結束符
Escape(1B) ANSI轉義字元引導符
Space(20) 常用的參數界定符
Tab(09) ; = 不常用的參數界定符
+ COPY命令文件連接符
* ? 文件通配符
"" 字串界定符
| 命令管道符
< > >> 文件重定向符
@ 命令行回顯遮罩符
/ 參數開關引導符
: 批次處理標籤引導符
% 批次處理變數引導符

其次, :: 確實可以起到rem 的注釋作用, 而且更簡潔有效; 但有兩點需要注意:
第一, 除了 :: 之外, 任何以 :開頭的字元行, 在批次處理中都被視作標號, 而直接忽略其後的所有內容, 只是為了與正常的標號相區別, 建議使用 goto 所無法識別的標號, 即在 :後緊跟一個非字母數位元的一個特殊符號.
第二, 與rem 不同的是, ::後的字元行在執行時不會回顯, 無論是否用echo on打開命令行回顯狀態, 因為命令解釋器不認為他是一個有效的命令行, 就此點來看, rem 在某些場合下將比 :: 更為適用; 另外, rem 可以用於 config.sys 文件中.
=====================

echo 表示顯示此命令後的字元
echo off 表示在此語句後所有執行的命令都不顯示命令行本身
@與echo off相象,但它是加在每個命令行的最前面,表示執行時不顯示這一行的命令行(只能影響當前行)。
call 調用另一個批次檔案(如果不用call而直接調用別的批次檔案,那麼執行完那個批次檔案後將無法返回當前檔並執行當前檔的後續命令)。
pause 執行此句會暫停批次處理的執行並在螢幕上顯示Press any key to continue...的提示,等待用戶按任意鍵後繼續
rem 表示此命令後的字元為解釋行(注釋),不執行,只是給自己今後參考用的(相當於程式中的注釋)。
==== 注 =====
此處的描述較為混亂, 不如直接引用個命令的命令行幫助更為條理

-------------------------
ECHO

當程式執行時,顯示或隱藏批次處理程式中的正文。也可用於允許或禁止命令的回顯。

在執行批次處理程式時,MS-DOS一般在螢幕上顯示(回顯)批次處理程式中的命令。
使用ECHO命令可關閉此功能。

語法

ECHO [ON|OFF]

若要用echo命令顯示一條命令,可用下述語法:

echo [message]

參數

ON|OFF
指定是否允許命令的回顯。若要顯示當前的ECHO的設定,可使用不帶參數的ECHO
命令。

message
指定讓MS-DOS在螢幕上顯示的正文。

-------------------

CALL

從一個批次處理程式中調用另一個批次處理程式,而不會引起第一個批次處理的中止。

語法

CALL [drive:][path]filename [batch-parameters]

參數

[drive:][path]filename
指定要調用的批次處理程式的名字及其存放處。檔案名必須用.BAT作副檔名。

batch-parameters
指定批次處理程式所需的命令行資訊。

-------------------------------

PAUSE

暫停批次處理程式的執行並顯示一條消息,提示用戶按任意鍵繼續執行。只能在批處
理程式中使用該命令。

語法

PAUSE

REM

在批次檔案或CONFIG.SYS中加入注解。也可用REM命令來遮罩命令(在CONFIG.SYS
中也可以用分號 ; 代替REM命令,但在批次檔案中則不能替代)。

語法

REM [string]

參數

string
指定要遮罩的命令或要包含的注解。
=======================

例1:用edit編輯a.bat檔,輸入下列內容後存檔為c:\a.bat,執行該批次檔案後可實現:將根目錄中所有檔寫入 a.txt中,啟動UCDOS,進入WPS等功能。

批次檔案的內容為: 命令注釋:

@echo off 不顯示後續命令行及當前命令行
dir c:\*.* >a.txt 將c盤文件列表寫入a.txt
call c:\ucdos\ucdos.bat 調用ucdos
echo 你好 顯示"你好"
pause 暫停,等待按鍵繼續
rem 準備執行wps 注釋:準備執行wps
cd ucdos 進入ucdos目錄
wps 執行wps

批次檔案的參數

批次檔案還可以像C語言的函數一樣使用參數(相當於DOS命令的命令行參數),這需要用到一個參數表示符"%"。

%[1-9]表示參數,參數是指在執行批次檔案時在檔案名後加的以空格(或者Tab)分隔的字串。變數可以從%0到%9,%0表示批次處理命令本身,其他參數字串用%1到%9順序表示。

例2:C:根目錄下有一批次檔案名為f.bat,內容為:
@echo off
format %1

如果執行C:\>f a:
那麼在執行f.bat時,%1就表示a:,這樣format %1就相當於format a:,於是上面的命令執行時實際執行的是format a:

例3:C:根目錄下一批次檔案名為t.bat,內容為:
@echo off
type %1
type %2

那麼執行C:\>t a.txt b.txt
%1 : 表示a.txt
%2 : 表示b.txt
於是上面的命令將順序地顯示a.txt和b.txt檔的內容。

==== 注 ===============
參數在批次處理中也作為變數處理, 所以同樣使用百分號作為引導符, 其後跟0-9中的一個數字構成參數引用符. 引用符和參數之間 (例如上文中的 %1 與 a: ) 的關係類似於變數指標與變數值的關係. 當我們要引用第十一個或更多個參數時, 就必須移動DOS 的參數起始指標. shift 命令正充當了這個移動指標的角色, 它將參數的起始指標移動到下一個參數, 類似C 語言中的指標操作. 圖示如下:

初始狀態, cmd 為命令名, 可以用 %0 引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

經過1次shift後, cmd 將無法被引用
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8 %9

經過2次shift後, arg1也被廢棄, %9指向為空, 沒有引用意義
cmd arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10
^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | |
%0 %1 %2 %3 %4 %5 %6 %7 %8

遺憾的是, win9x 和DOS下均不支援 shift 的逆操作. 只有在 nt 內核命令行環境下, shift 才支援 /n 參數, 可以以第一參數為基準返複移動起始指標.
=================

特殊命令

if goto choice for是批次檔案中比較高級的命令,如果這幾個你用得很熟練,你就是批次檔案的專家啦。

一、if 是條件語句,用來判斷是否符合規定的條件,從而決定執行不同的命令。 有三種格式:

1、if [not] "參數" == "字串" 待執行的命令

參數如果等於(not表示不等,下同)指定的字串,則條件成立,執行命令,否則執行下一句。

例:if "%1"=="a" format a:

====

if 的命令行幫助中關於此點的描述為:
IF [NOT] string1==string2 command
在此有以下幾點需要注意:
1. 包含字串的雙引號不是語法所必須的, 而只是習慣上使用的一種"防空"字元
2. string1 未必是參數, 它也可以是環境變數, 迴圈變數以及其他字串常量或變數
3. command 不是語法所必須的, string2 後跟一個空格就可以構成一個有效的命令行
=============================

2、if [not] exist [路徑\]檔案名 待執行的命令
如果有指定的檔,則條件成立,執行命令,否則執行下一句。

如: if exist c:\config.sys type c:\config.sys
表示如果存在c:\config.sys檔,則顯示它的內容。

****** 注 ********
也可以使用以下的用法:
if exist command
device 是指DOS系統中已載入的設備, 在win98下通常有:
AUX, PRN, CON, NUL
COM1, COM2, COM3, COM4
LPT1, LPT2, LPT3, LPT4
XMSXXXX0, EMMXXXX0
A: B: C: ...,
CLOCK$, CONFIG$, DblBuff$, IFS$HLP$
具體的內容會因硬軟體環境的不同而略有差異, 使用這些設備名稱時, 需要保證以下三點:
1. 該設備確實存在(由軟體虛擬的設備除外)
2. 該設備驅動程式已載入(aux, prn等標準設備由系統缺省定義)
3. 該設備已準備好(主要是指a: b: ..., com1..., lpt1...等)
可通過命令 mem/d | find "device" /i 來檢閱你的系統中所載入的設備
另外, 在DOS系統中, 設備也被認為是一種特殊的檔, 而檔也可以稱作字元設備; 因為設備(device)與檔都是使用控制碼(handle)來管理的, 控制碼就是名字, 類似於檔案名, 只不過控制碼不是應用於磁片管理, 而是應用於記憶體管理而已, 所謂設備載入也即指在記憶體中為其分配可引用的控制碼.
==================================

3、if errorlevel <數位> 待執行的命令

很多DOS程式在執行結束後會返回一個數位值用來表示程式執行的結果(或者狀態),通過if errorlevel命令可以判斷程式的返回值,根據不同的返回值來決定執行不同的命令(返回值必須按照從大到小的順序排列)。如果返回值等於指定的數字,則條件成立,執行命令,否則執行下一句。

如if errorlevel 2 goto x2

==== 注 ===========
返回值從大到小的順序排列不是必須的, 而只是執行命令為 goto 時的習慣用法, 當使用 set 作為執行命令時, 通常會從小到大順序排列, 比如需將返回碼置入環境變數, 就需使用以下的順序形式:

if errorlevel 1 set el=1
if errorlevel 2 set el=2
if errorlevel 3 set el=3
if errorlevel 4 set el=4
if errorlevel 5 set el=5
...

當然, 也可以使用以下迴圈來替代, 原理是一致的:
for %%e in (1 2 3 4 5 6 7 8...) do if errorlevel %%e set el=%%e

更高效簡潔的用法, 可以參考我寫的另一篇關於獲取 errorlevel 的文章

出現此種現象的原因是, if errorlevel 比較返回碼的判斷條件並非等於, 而是大於等於. 由於 goto 的跳轉特性, 由小到大排序會導致在較小的返回碼處就跳出; 而由於 set命令的 "重複" 賦值特性, 由大到小排序會導致較小的返回碼 "覆蓋" 較大的返回碼.

另外, 雖然 if errorlevel=<數字> command 也是有效的命令行, 但也只是 command.com 解釋命令行時將 = 作為命令行切分符而忽略掉罷了
===========================

二、goto 批次檔案執行到這裏將跳到goto所指定的標號(標號即label,標號用:後跟標準字串來定義)處,goto語句一般與if配合使用,根據不同的條件來執行不同的命令組。

如:

goto end

:end
echo this is the end

標號用":字串"來定義,標號所在行不被執行。

==== willsort 編注

label 常被譯為 "標籤" , 但是這並不具有廣泛的約定性.

goto 與 : 聯用可實現執行中途的跳轉, 再結合 if 可實現執行過程的條件分支, 多個 if 即可實現命令的分組, 類似 C 中 switch case 結構或者 Basic 中的 select case 結構, 大規模且結構化的命令分組即可實現高階語言中的函數功能. 以下是批次處理和C/Basic在語法結構上的對照:

Batch C / Basic
goto&: goto&:
goto&:&if if{}&else{} / if&elseif&endif
goto&:&if... switch&case / select case
goto&:&if&set&envar... function() / function(),sub()
==================================
三、choice 使用此命令可以讓用戶輸入一個字元(用於選擇),從而根據用戶的選擇返回不同的errorlevel,然後於if errorlevel配合,根據用戶的選擇執行不同的命令。

2008年4月18日 星期五

Comodo Firewall Pro 3.0.21.329 免費防火牆

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl


網路是個充滿數不盡知識的場所,也由於太多形形色色的資訊在這上面,常常會令使用者流連忘返,也可能因此讓有心人士藉由散佈資訊而得到入侵你系統的機會。如果你還天真的以為系統內建的防火牆能夠為你提供什麼實質上的保護,那麼你真該去看看系統安全廠商對系統內建防火牆的測試結果,相信會讓你嚇出一身冷汗的。

Comodo Firewall Pro 是由著名的系統安全供應商- Comodo Inc 所開發的一套免費網路防火牆,它具有一般市售防火牆的多數功能,如封鎖特定通訊埠、封鎖特定軟體網路存取權限、監控網路使用情形、安全等級調整等,這些一般在商業軟體上才看得到的功能,在 Comodo Firewall Pro 可是做得相當完整,一點也不含糊喔。


如果你還沒有安裝網路防火牆,那麼別遲疑,既然有免費又方便的 Comodo Firewall Pro 供你使用,你還不馬上行動嗎?儘早將自己的電腦由不安全的危險名單中移除吧!


System Requirements 系統需求


  1. Windows XP (SP2) 32 bit version


  2. Windows XP 64 bit version


  3. Windows Vista 32 and 64 bit versions


  4. 64 Mb RAM


  5. 55 MB hard disk space for 32-bit versions and 75 MB for 64-bit versions

  • English language only


32-bit Click here to download Size: 20.0 MB (20,902,656 bytes)


64-bit Click here to download Size: 29.3 MB (30,752,512 bytes)

2008年4月17日 星期四

將GIF動畫中的每一張圖分解出來!教學

加入書籤: HemiDemi MyShare Baidu Google Bookmarks Yahoo! My Web Del.icio.us Digg technorati furl

IrfanView這套免費的看圖軟體,只要按兩個下,就可以幫你將GIF動畫的每一個動作通通分解出來,

將它另外存檔成JPEG或一般GIF格式的圖檔,方便另外作修改或應用。

軟體版本:4.10
官方網站http://www.irfanview.com/

中文語系按這裡(解壓縮後放到C:\Program Files\IrfanView\Languages資料夾)

軟體下載


Get it from CNET Download.com! Get it from CNET Download.com!


TUCOWS Worldwide Network - Download IrfanView


TUCOWS Worldwide Network - Download IrfanView plugins


Fileforum - Download IrfanView


Fileforum - Download IrfanView plugins


TechSpot - Download IrfanView


TechSpot - Download IrfanView plugins


Freeware Archiv (Germany)


Download.hr - Download IrfanView and PlugIns


PC-Intern.com - Download IrfanView and PlugIns


AEI Computer Tech - Download IrfanView and PlugIns


Winsoftware.de (Germany)

 

簡單上手教學

第1步  用IrfanView軟體開啟你要拆解的GIF動畫圖檔。

image

 

第2步 接著請依序按下〔選項〕→【匯出全部畫面】。出現存檔對話框後,請先選擇要儲存的資料夾。

image

第3步  剛剛的GIF動畫,已經被拆解出來!

EasyReadMore