2009年12月31日 星期四

建立開機隨身碟

現在隨身碟隨便都可以拿到,反而是CD若不是在家中,反而比較難拿到。

USB Disk Storage Format Tool是由HP提供的免費軟體,可用來將USB隨身碟格式化,並且能載入開機程式,製作出具有開機功能的USB隨身碟。非HP的電腦也能使用這個工具。

主要功能為針對USB隨身碟切割出開機磁區,該工具本身並不提供開機系統檔案,使用者需額外準備,透過該工具將需要的檔案建立到系統內,才能建立適合自己的USB開機隨身碟。

不同於Windows XP內建的隨身碟格式化功能,USB Disk Storage Format Tool除了FAT、FAT32之外,也支援NTFS檔案系統的格式化。不過該工具並不支援在NTFS檔案格式下建立開機磁區。

若要使用開機隨身碟,電腦主機也需要支援USB裝置開機才行。

[2010.09.10 補充]
因為,常在做測試,開機隨身碟中會有許多可以執行的程式。
若放在根目錄中,會整個顯的非常的凌亂。因此,我在隨身碟的根目錄中建立一個USBTOOL的目錄,裡面都是放所有測試的執行檔,但是,這樣會有一個缺點,當我要執行SPFdisk時,就必需要進入USBTOOL的資料夾或者是直接在根目錄下打USBTOOL\SPFDisk,非常不順手。

在昨天同事的介紹下,知道在進入所有的系統中,都會去尋找根目錄下的AUTOEXEC.BAT這一個批次檔,並且去執行它。
要在AUTOEXEC.BAT裡面設定PATH的話,就直接在檔案設定要執行的內容。以下就是範例:
AUTOEXEC.BAT
PATH C:\USBTOOL

參考資料:
使用usb flash disk建立開機碟
用USB工具 建立開機隨身碟
HP 筆記型電腦 ─ 如何建立可開機的 USB 記憶體隨身碟
Free Boot Disks
UNetbootin
HPUSBFW 製作可開機 USB 隨身碟
MS-DOS 之基本使用

2009年12月30日 星期三

解決在vim下可以讀取Unicode的檔案

在vim下要讀取Unicode的檔案,vim要做以下的設定
:set encoding=utf-8

但是,如此一來,在windows下的gvim選單就會出現亂碼
解決方法如下
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim


砍掉目前選單,再重讀一次,選單就不會有亂碼了。

狀態列的中文訊息亂碼,則要加上下面這一行來解決

language messages zh_TW.UTF-8

若要把menu及訊息設定成英文,就可以設定為:
set langmenu=none
:lang mes en


參考資料:
讓 vim 在 Windows 下用 unicode 選單不亂碼的方法
vim簡介及如何使用Unicode或其他編碼
Linux 底下的編碼顯示問題
Linux作業系統Vim/Vi編程提速

2009年12月29日 星期二

RamDisk和Junction

在編譯project時,因會要編譯超多的檔案,所以,對I/O的讀取會相當多次~

今天由同學那裡知道原來有一個免費的軟體,叫RamDisk可以把記憶體當作硬碟來使用~

這樣就可以減少對硬碟的讀取了!不過,缺點是每一次重新開機後,資料都會不見!(不過,這可能也是優點,這就要看資料夾怎麼使用了!)

不過,還好,我有用SVN版本控制,可以在每一次要做project前,才把資料由svn把原始碼還原,所以整體上的效能和方便性還算不錯!

以下是我做的步驟~

因為Build這一個資料夾裡面放的是compiler的產物,為了要加速編譯的過程,所以,要建立一個RamBuild資料夾,而它是放在RamDisk上,而在原本的位置的會建立一個新的Build,而它是hard link到RamBuild這一個資料夾,換句話說,這樣就可以騙過系統,當它在存取Build資料夾時,實際上是在存取在RamDisk上的RamBuild資料夾,如此一來,就可以加快編譯的速度啦~

而在Linux下有hard link的功能,但是,在windows下確沒有hard link的功能,這個時候,我們要用junction的功能,它可以讓XP具有hard link的功能

1. 暫時把d:\下的Build改名為Build_bak,並同時建立一個新的Build資料夾
% move Build Build_bak && mkdir Build

2. 在RamDisk上建立一個新的資料夾RamBuild,並且把Build資料夾hard link到RamBuild資料夾
% mkdir r:\RamBuild && junction Build r:\RamBuild

3. 把所有在Build_bak資料夾下的內容複製到Build資料夾下
% xcopy Build_bak\*.* Build\ /k /e /q /y

4. 為了計算編譯的時間,所以,預先取得編譯前的時間
% set OLDTIME=%time%

5. 開始編譯,其中,若要使用到其它bat檔,當它執行完時,再回來繼續執行剩下的程式碼,則必需要使用到call,若沒有使用call的話,而直接使用bat檔的話,則當bat檔執行完後,馬上結束,不會執行這一個bat檔剩下的程式碼
% cd Build && call MultiMake.bat

6. 取得編譯完後的時間
% set NEWTIME=%time%

7. 把編譯完成之後的結果複製到Build_bak資料夾中,這裡要注意的是,這裡的Build資料夾,因為透過junction,同時也代表在RamDisk下的RamBuild資料夾,也就是存放compiler後的產物放的位置
% cd .. && xcopy Build\*.* Build_bak\ /k /e /q /y

8. 移除Build資料夾hard link到RamBuild資料夾的特性,並且把Build_bak改名為Build
% junction -d Build && move Build_bak Build

9. 刪除在RamDisk下的RamBuild資料夾,另外,因為XP沒有deltree,必需要另外到這一個頁面下載
% deltree /y r:\RamBuild

10. 顯示編譯前的時間與編譯後的時間
% echo Start Time %OLDTIME%
% echo End   Time %NEWTIME%


以下是完整的程式碼,在bat檔中,rem是表示註解的意思
fastmake.bat
rem rename Build to Build_bak
move Build Build_bak && mkdir Build

rem create a new file r:\RamBuild, if success hard link Build to r:\RamBuild in the RamDisk
mkdir r:\RamBuild && junction Build r:\RamBuild

rem copy all the Build_bak file to Build
xcopy Build_bak\*.* Build\ /k /e /q /y

rem get the current time before compiler
set OLDTIME=%time%

rem compiler...
cd Build && call MultiMake.bat

rem get the current time after compiler
set NEWTIME=%time%

rem copy the result to Build_bak
cd .. && xcopy Build\*.* Build_bak\ /k /e /q /y

rem delete the junction folder and renmae Build_bak to Build
junction -d Build && move Build_bak Build

rem delete all the file in the r:\RamBuild
deltree /y r:\RamBuild

rem show the time before compiler
echo Start Time %OLDTIME%

rem show the time after compiler
echo End   Time %NEWTIME%


MultiMake.bat
因為,不知道什麼原因,必需要重覆nmake多次才會成功,因此,在這裡設定最大try 20次
rem because there is no-reason problem, we have nmake multi-time

@echo off

rem set the MaxTry
set MaxTry=20

rem set the current count to record the TryCount
set Count=0

:start
rem when Count is less or equal than MaxTry, Count will plus one and nmake again
rem If the nmake is fail, the process will go to start label.
rem If the nmake is success, the process will go to next line instead of going to start label.

if %Count% LEQ %MaxTry% set /A Count=Count+1 && echo this is %Count% times && nmake || goto start

IF %Count% GTR %MaxTry% (
  echo exceed MaxTry, compiler fail!!!!!.
) ELSE (
  echo Compiler success!!!!!.
)

:end


[2010.01.07 補充]
也可以使用RamDisk來加快,瀏覽器的存取~

1. 首先需要先安裝 RAMDisk 軟體,把記憶體拿來劃成硬碟使用。可以參考這裡

2. 我自己是把 RAMDisk 設成 R:\

Internet Explorer
3. 開啟 IE > 工具 > 網際網路選項 > 設定 > 移動資料夾 > 指向 R:\IECache

4. 重新啟動 IE

Firefox
5. 開啟 Firefox 後,在網址列上敲上 about:config

6. 新增 > 字串 > 鍵入 "browser.cache.disk.parent_directory" > 填上字串值 "R:\FirefoxCache"

7. 確認是否有browser.cache.disk.smart_size_cached_value,若沒有新增為數值類型,並且填上225280為其數值

8. browser.cache.disk.smart_size.enabled確定為true

8. 重新啟動 Firefox

9. 在網址列寫入about:cache
可以看到目前cache的設定

Chrome
8. 直接在Chrome在捷徑加上一個參數: --disk-cache-dir=R:\ChromeCache ("R:\ChromeCache"位置可自訂)

現在 IE, Firefox, Chrome 瀏覽時的暫存檔案都會放在 RAMDisk R:\ 上,理論上是比暫存在硬碟上快些。有興趣的朋友,不妨嘗試看看囉~

[2010.01.16 補充]
以下的bat檔案,主要是在編譯不同的檔案的時候,要使用不同的compiler,這個時候要用junction來指到不同的compiler,這一個bat可以讓使用者選擇要建立Junction資料夾或是移除Junction資料夾~

@echo off

rem build a hard link from DEVTLS to target-directory
rem redirect-DEVTLS target-directory
rem Example: redirect-DEVTLS D:\DEVTLS_Tool\NTC_DEVTLS


set /P UserSelect=1. Redirect DEVTLS 2. Remove Junction Direct (D:\DEVTLS):
if %UserSelect% EQU 1 goto Redirect
if %UserSelect% EQU 2 goto Undirect
echo Your choice out of option
goto end

:Redirect
echo ==========Redirect option==========
set /P UserInput=Please input the target DEVTLS directory(ex: D:\DEVTLS_Tool\NTC_DEVTLS):

rem test the DEVTLS exist or not
IF EXIST DEVTLS (
rem DEVTLS exists, remove junction directory
junction -d DEVTLS || goto fail
echo remove the original junction directory successfully
)

rem Test the target directory
IF EXIST %UserInput% (
rem If exists, create junction directory from %UserInput% to DEVTLS
junction DEVTLS %UserInput% || goto fail
echo build create junction directory form %UserInput% to DEVTLS successfully
goto success
) ELSE (
echo target %UserInput% doesn't exist
goto fail
)

:Undirect
echo ==========Undirect option==========
rem test the DEVTLS exist or not
IF EXIST DEVTLS (
rem DEVTLS exists, remove junction directory
junction -d DEVTLS || goto fail
echo remove the original junction directory successfully
goto success
) ELSE (
echo DEVTLS doesn't exist
goto fail
)

:success
goto end

:fail
goto end

:end
echo End of Bat File...
pause


[2010.05.11 補充]
@ECHO OFF

REM build a hard link from DEVTLS to target-directory
REM redirect-DEVTLS target-directory
REM Example: redirect-DEVTLS D:\DEVTLS_Tool\NTC_DEVTLS

REM Initial the Junction folder
REM If mark SET JunctionTarget, this bat will ask user the JunctionTarget when proceduring

SET JunctionTarget=

REM ===========================================================================
REM ==== GET&SET SOURCE AND TARGET PATH (DO NOT MODIFY) =======================

IF "%JunctionTarget%" NEQ "" GOTO JunctionProcedure
ECHO ========== SET JunctionTarget Folder ==========
SET /P JunctionTarget=Please input the target directory (ex: D:\DEVTLS):

:JunctionProcedure
ECHO ========== User Selection ==========
ECHO 1. Redirect %JunctionTarget%
ECHO 2. Remove Junction Direct (%JunctionTarget%)
SET /P UserSelect=User Select:
IF %UserSelect% EQU 1 GOTO Redirect
IF %UserSelect% EQU 2 GOTO Undirect
ECHO Your choice out of option
GOTO End

:Redirect
ECHO ========== Redirect option ==========
SET /P JunctionSource=Please input the source directory(ex: D:\DEVTLS_Tool\NTC_DEVTLS):

REM test the %JunctionTarget% exist or not
IF EXIST %JunctionTarget% (
REM %JunctionTarget% exists, remove junction directory
junction -d %JunctionTarget% || GOTO Fail
ECHO Remove the original junction directory successfully
)

REM Test the source directory
IF EXIST %JunctionSource% (
REM IF exists, create junction directory from %JunctionSource% to %JunctionTarget%
junction %JunctionTarget% %JunctionSource% || GOTO Fail
ECHO Create junction directory form %JunctionSource% to %JunctionTarget% successfully
GOTO Success
) ELSE (
ECHO target %JunctionSource% doesn't exist
GOTO Fail
)

:Undirect
ECHO ========== Undirect option ==========
REM test the %JunctionTarget% exist or not
IF EXIST %JunctionTarget% (
REM %JunctionTarget% exists, remove junction directory
junction -d %JunctionTarget% || GOTO Fail
ECHO Remove the original junction directory successfully
GOTO Success
) ELSE (
ECHO %JunctionTarget% doesn't exist
GOTO Fail
)

:Success
GOTO End

:Fail
GOTO End

:End
ECHO End of Bat File...
PAUSE


參考資料:
Gavotte Ramdisk 免費「虛擬硬碟」使用教學
密技 / 塞爆4G記憶體! Gavotte Ramdisk 32 bit XP
Junction v1.05
Gavotte RAMDisk
用gavotte的ramdisk碰到問題~求解
用mklink與junction建立資料夾連結
拿 RAMDisk 加速 Firefox, IE 的瀏覽速度
Gavotte Ramdisk 使用心得
介紹好用工具:Junction ( Windows 版的 symbolic link )

2009年12月22日 星期二

vim 分割視窗功能

使用vim來比較檔案
因為比較後的結果是使用分割視窗來顯示,所以,把它放在這一個單元
% vim -d file1 file2

例子:
一開始的檔案before.txt內容為
aaaa
dddd
cccc
hhhh


而之後的檔案after.txt內容為
aaaa
xxxx
yyyy
cccc


最後,執行以下的指令
% vim -d before.txt after.txt
會出現以下的比較畫面

紅色的意思應該是說,把左邊第二行改為右邊第二行,算是屬於修改的部分!

而右邊第三行與左邊第三行表示右邊新增一個yyyy的內容

而第五行則表示邊新增一個hhhh的內容

[2010.03.13 補充]
:split 分割視窗(可加檔名順便開啟另一檔案)
:diffsplit xxx 以分割視窗和檔案xxx做比較(diff)
Ctrl-W p 跳到前一個分割視窗(在兩個分割窗來回切換)
Ctrl-W j 跳到下面的分割窗
Ctrl-W h 跳到左邊的分割窗
Ctrl-W k 跳到上面的分割窗
Ctrl-W l 跳到右邊的分割窗

參考資料:
給程式設計師的Vim入門圖解說明

vim tab功能

在vim下,可以使用類似firefox, kkman,在一個應用程式中,可以有多個畫面!
我主要分成兩大類!

一個是使用:split:vsplit,把一個畫面同時分成兩個以上的畫面,用這一個的好處就是,可以「同時」看到多個檔案開啟!

而另一個就是使用tab的方式,雖然一次只能看到一個畫面,但是,開啟多個檔案的時候,不會讓windows最下面的開啟檔案非常的複雜~而且,檔案之間,仍然可以使用vim內建的copy功能(像是yy, p...等等指令)~而這一個也是本篇文章要提到的主題~

一次 vi 數個檔案來作編輯,預設 vim (也就是 vi) 同時可開 10 個 tab (這可以透過 set tabpagemax= 的方式設定,將它加大或減少)。

也就是說,當你想同時 vim 三個檔案 (例如 file1、file2、file3),可以:

vim -p file1 file2 file3

還可以:set tabline來定義 tab 顯示方式

tab相關的功能為:
=========================================
:tabdo
可以同時對目前的所有已開啟的tabfile執行相同的動作,這一個動作對我非常有用
例如:對目前所有用tab開啟的檔案內容把originalstring轉換成newstring
:tabdo %s/originalstring/newstring/gc

另一個例子,把所有的檔案中,有Caspar-comment的行刪掉
:tabdo %!grep -v Caspar-comment
如此一來真的可以省下非常多的打指令的時間

[start-20100307-add]
可以直接使用vim內建的功能達到,而不需要使用到外部指令
:g/.*Caspar-comment.*/d
[end-20100307-add]
=========================================
:tabn(ext)
當有多個tab的時候,在execute mode下打:tabn就是移動到下一個tab
括號的部分可以打,若不打的話,就是簡寫
或是 gt, C-PageDown也可以達到相同的效果
=========================================
:tabp(revious)
當有多個tab的時候,在execute mode下打:tabp就是移動到上一個tab
或是 gT, C-PageUp也可以達到相同的效果
=========================================
:tabs
顯示目前的所有tab的情況
=========================================
:tabnew filename
開啟一個新的tab;後面可以接新的檔案名稱
=========================================
:tabe(dit) filename
開啟一個檔案,當檔案不存在的時候,直接開啟一個新的檔案
=========================================
:tabc(lose)
關掉目前正在使用的tab分頁
=========================================
:tabo
關閉其它tab分頁
=========================================
:tab(fi)r(st)
跳到編號為1號的tab分頁
=========================================
:tabfind filename
尋找名為filename的tab分頁
=========================================
:tabl(ast)
跳到編號為最後一號的tab分頁
=========================================
:tabm [N]
移動到編號為N的tab分頁
=========================================
在vimrc內容中,加入熱鍵
" 加入tabnew, tabprevious, tabnext的快速鍵
nmap <C-t> :tabnew<CR>
nmap <C-Left> :tabprev<CR>
nmap <C-Right> :tabnext<CR>

=========================================
在新的tab頁面顯示help頁面
:tab help
=========================================
參考資料:
Vim 的小玩意: tab 怎麼玩?
vim tab 功能
My editor ,Vim
Vim7 的 <C-Left> 與 <C-Right>
VIM Tab & Space
Vim Hacks

把Vim折疊(folding)

在我要去上免費課程vim之前,我把「大家來學 Vim一個歷久彌新的編輯器」看過一遍之後,
原本我認為vim的folding是不重要的!但是,在經過上次去上過免費課程vim之後,覺得似乎有那麼一點噱頭~
所以,就打算寫這一篇文章!

突然發現,vim的文章在我的blog越來越多了,所以,就新增一個vim的tag吧~

其實,大部分就是參考「大家來學 Vim一個歷久彌新的編輯器」的內容,新增這一篇文章是可以把在學習過程中使用到的相關資訊補充在這裡!

折疊的產生
zfap 將游標所在處的那個段落折疊成一行。
zf7G 自游標所在處至全文第 7 行折疊起來。
:3,9fold 將第 3 行至第 7 行折疊起來。
5zF 將游標所在處起算 5 行的內容折疊起來。

也可以將所要折疊的部份以 Shift+v 標記起來,然以按 zf 就會將標記的內容折疊起來。

折疊的操作

zo 將游標所在處的折疊打開。open。
zc 將游標所在處已打開的內容再度折疊起來。close。
zr 將全文的所有折疊依層次通通打開。reduce。
zm 將全文已打開的折疊依層次通通再折疊起來。more。
zR 作用和 zr 同,但會打開含巢狀折疊(折疊中又還有折疊)的所有折疊。
zM 作用和 zm 同,但對於巢狀折疊亦有作用。
zi 這是個切換,是折疊與不折疊指令間的切換。
zn 打開全文的所有折疊。fold none。
zN 這是 zn 的相對指令,回復所有的折疊。

折疊的記憶
我們可以使用:mkview把折疊的情形記憶起來,下一次載入同一個檔案時就可以下:loadview,記憶起以前折疊的情況。

另外,這裡要注意一點的是,在Linux下,若你的家目錄下沒有.vimfiles\的話,就出現以下錯誤
Cannot create directory: ~/.vimfiles/view
這個時候,只要在家目錄下,新增一個.vimfiles就可以了。

而在Windows下使用GVimportable的話,就必需要在App\vim\下建立一個vimfiles就可以了~

當完成上述的步驟之後,在到execute mode輸入:mkview就可以把目前的folding情況儲存起來了!而下次打開檔案的時候,在execute mode下輸入:loadview就可以把上次這一個檔案的folding載入進來~

自動折疊
以縮行為依據
:set foldmethod=indent 就會依縮行來折疊,本來預設是 :set foldmethod=normal。請注意,此時手動折疊的設定會被停止無法使用。

以特殊的表示法為依據
:set foldmethod=expr,另外還要設定 :set foldexpr=...,可參考線上使用手冊:h fold-expr的例子。

以語法為依據
這是在定義語法(syntax)檔時同時加入折疊的定義。然後,set foldmethod=syntax就會依照這個語法定義檔去折疊,請:h syn-fold

以是否更改過為依據
這在進入 vimdiff(即 vim -d file1 file2) 時會自動進入foldmethod=diff的模式,因此要 diff 設定項設在同一個螢幕顯示才行。以便整體的瀏覽。當然要自行更改預設值亦可。預設是:

setlocal diff foldmethod=diff scrollbind nowrap foldlevel=1

這樣一來,兩個檔案相同的部份會折疊起來,沒有折疊的部份就是有差異的地方。

以文件上的標誌為依據
這是跟據文章中的標誌(marker)來做折疊。這些標誌,起於{{{,止於}}},這中間的部份會折疊起來。通常這些標誌是藏在註解欄裡頭,例如 C 程式碼的/**/之間,shell script 的#之後,Vim script 的"之後,得視程式語言的不同而定,因此一般的文章就不適合使用了。

這些預設的標誌也可以由 foldmarker 來更改,但為了文件的流通性,建議使用預設值就可以了。

當然,一些程式碼載入時再來設定:set foldmethod=marker就太麻煩了,這個設定可以設在文件內,例如:
#!/bin/sh
# 這是一個 sh script
# {{{
……
這裡是 script 內容,由 vim 打開這
個檔時,這個部份會自動折疊起來。
……
# }}}
# vim:fdm=marker:ts=2

最後一項不是很懂,留到以後再說吧~

參考資料:
把 Vim 折疊(folding)?

2009年12月19日 星期六

Vim script

按鍵對應

[實例] :map <F5> bi{<Esc>ea}<Esc>
這樣一來,只要在英文單字任意處按 F5,這個英文單字的前後就會加上大括號。

說明如下:
bi{<Esc> 按 b 移至英文單字的第一個字母處,並按 i 進入插入模式,寫入 { 這個字元,並按 Esc 鍵,回復常態模式。
e 移動至這個英文單字的最後一個字母處。
a}<Esc> 進入插入 append 模式,並輸入 } 這個字元,再回到常態模式。

需注意的是,在命令列模式前頭會有個冒號,因為在 vim 裡頭,要按個冒號才會進入命令列模式。但如果是設在 Vim script 檔裡頭當然就沒有冒號了。以上的例子也是可以對應至一些較容易記憶的按鍵,例如:

map ,b bi{<Esc>ea}<Esc>

這樣按 ``,b'' 就會有同樣的作用,但 ``,'' 及 ``b'' 之間不能相隔太久的時間,這樣 Vim 才會知道這兩個按鍵是結合在一起的。而 b 在此就代表 braces(大括號)。

如果要知道目前的按鍵對應的情形,可 :map 就會列出所有的目前按鍵對應,前面標示的記號就是各種模式的代表字母,例如 n 代表 normal,i 代表 insert。

縮寫對應
縮寫對應是把一長串的字串對應到簡單的幾個代表性字串。縮寫的對應只能用在插入模式、取代模式及命令列模式。主要用於輸入時節省時間及避免拼錯。這裡利用例子來做說明:

[實例] :ab gl GNU Linux
把 gl 這個按鍵對應成 GNU Linux。

ab 是 abbreviate 的縮寫,這樣一來,在插入模式時,只要輸入 gl,再按 Sapce 鍵或 Ctril+],這個 gl 就會變成 GNU Linux 這個字串。SapceCtril+] 的區別在於前者會多留個空白,方便繼續輸入其他文字;而後者則不會多留個空白。要注意的是,這在取代模式、命令列模式也是可以作用,如果是使用 :ia[bbrev],那只會在插入模式及取代模式有作用。

以下是一些常會用到的指令:

:ab[breviate] 不接任何參數,這會列出目前所有的縮寫對應。其中標有 `i' 的,代表作用於插入模式;標有 `c' 的,代表作用於命令列模式;標有 `!' 的,則兩種模式皆有作用。
:ab gl 這會列出 gl 是對應成什麼字串。
:una[bbreviate] gl 取消 gl 這個對應。
:ia[bbrev] 和 :ab 的定義一樣,但只作用於插入模式。
:cb[bbrev] 和 :ab 的定義一樣,但只作用於命令列模式。
:norea[bbrev] 用於防止重對應已有對應的字串。
:abc[lear] 取消所有由 :ab 所定義的對應。
:iabc[lear] 取消所有由 :ia 所定義的對應。
:cabc[lear] 取消所有由 :ca 所定義的對應。

" 設定加入函式註解的快速鍵(F5)
nmap <F5> o<Home>/*++^M^M<Home>Routine Description:^M<Home>  Description context^M^M<Home>Arguments:^M<Home>  Variable                  - the description for variable^M^M<Home>Returns:^M<Home>  EFI_SUCCESS               - operation successfully^M^M<Home>--*/<Esc>
其中^M是表示Enter動作,需要用Ctrl+v+M產生出來,其中nmap是表示只有在normal才會有作用,另外,要注意的是,上面的所有資料都是在同一行

[2010.10.10 補充]
設定在visual mode時有效的map
vunmap

參考資料:
Vim script 簡介

正規表示式 (regular expression)

* 指前所綁住的字元或字元集合,出現 0 次或 0 次以上。
\+* 作用相同,但不包括出現 0 次。
\= 指前所綁住的字元恰好出現 0 或 1 次。
\| 這是多選,就是 or 的意思,被 \| 隔開的 pattern,任一個符合的話就算符合。

\+, \=, \| 會加上一個 \,是因該字元在 Vim 就具有特殊意義,在一般的 regexp 中是 +, ?, | 就可以了,只是提醒您一下,以免搞混了! 記住 \+ 是不可數的!用辭不是很精確,只是幫助您記憶啦!

[實例] dg*
指 * 前所綁住的字元 g 出現 0 次或 0 次以上。也就是說 d(出現 0 次),dg, dgggg, dgggggggg 都是符合這個 pattern。如果您下尋找指令 /dg*,那符合這個 pattern 的字串都會被找出來。如果用在代換就要非常小心了,像 extended 中的 d 也是會被置換掉的。例如您下 :%s/dg*/test/g 的話,那 extended 這個字會換成 extentestetest。

shell 中使用的通用字元為 pattern matching notation 和 regexp 是不同的意思。dg* 在 shell 中是解為以 dg 開頭的任意字串,這就不包括 d 在內了,也就是說在 shell 中,* 是代表任一字元或字串,這在初接觸的朋友很容易就搞混,請千萬小心。

[[實例]] dg\+
dg, dgg, dgggggg 皆符合,但 d 則不符合。如果是 dg\= 的話,就只有 d、dg 這兩個符合了。

[[實例]] :%s/The\|All/test/g
全文中只要是 The 或 All 都會被替換成 test。注意,如果文中有 There 也是會被替換成 testre!要如何避免這種情形呢?下面會另述及限定使用法。

[[實例]] /123-\=4567
這樣會找出,123-4567 及 1234567。當然 123-456789 也是會被找出來。

[...] 字元集合,表示中括號中所有字元中的其中一個。
[^..] 這是上述 [...] 的補集,表非中括號內字元的其中一個。
. 除換行字元外的任一單一字元。指本身,非指前所綁之字元。就好像 shell 中的 ? 一樣。如果要指定真正的英文句點,要用 \來 escape,就是說 \. 這時的 . 是代表真正句點,而不是 regexp 中的特殊意義。其他如 \* 亦同。

[[實例]]
[Aa]
A 或 a 其中的一個。
[12345]
12345 其中的一個數目字。可用 [1-5] 來表示。連續性的數目字或字元可用 -來隔開,寫出頭尾來代表就可以了。[0-9] 就表 0 到 9 的數目字,[a-d] 就代表 abcd 四個英文字母

[[實例]] W[0-9]*\.cc
這個例子是說以 W 開頭,後接 0-9 其中一個或多個數目字或不接什麼,然後是一個句點,最後是 cc。所以 W.cc,W1.cc,W2.cc,W345.cc,W8976543287.cc 皆符合。如果要表示 W 及 .cc 間夾一個以上的數目字,要寫成 W[0-9][0-9]*\.cc。

[[實例]] .*
這代表任意字元或字串,或什麼都沒有,腦筋急轉彎,對照前面的定義想一下。當然這是不包括換行字元的。

[[實例]]
[^M] 表除 M 以外的任意字元。
[^Tt] 表 T 及 t 以外的任意字元。
[^0-9] 表非數目字之字元。
[^a-zA-Z] 表非英文字母之字元。

注意,^ 要在中括號內,且在最開頭的地方,否則另有含意。

^ 匹配行首,指其後綁住的字串,出現在行首才符合。
$ 匹配行尾,指其前綁住的字串,出現在行尾才符合。含換行字元。

不是在行首的 ^ 指的是 ^ 這個字元。不是在行尾的 $ 是指 $ 本身這個字元。

[[實例]] /^What
這樣只有在行首的 What 才會被找出來。注意! Whatever, What's 也是會被找出來。如果是 /What$ 則是在行尾的 What 才會被找出來。

[[實例]] ^$
這是什麼東東?行首也是行尾的行。ㄚ,就是空白行嘛!當然也不能說這個行是沒有什麼東東啦!空白行至少也是會有個換行字元。在後面會詳述如何消除全文的空白行。

\(...\) 記憶 pattern,可由 \1, \2...\9 來叫出。

[[實例]] :%s/\([a-z]\)\1/test/g
這樣 aa, bb, cc, dd,...zz 都會被 test 替換掉。這和 :%s/[a-z][a-z]/test/g 是不一樣的意思,後者會把 aa, ab, ac...ba, bb, bc...zz 都換成 test。也就是說 \(...\) 由 \1 叫出時會有對稱性的配對出現。

[[實例]] :%s/\(.\)\(.\)r\2\1/test/g
會將中間為 r,前有二個任一字元,後有兩個具對稱性的字元所組成的字串替換成 test。\2 是呼叫第二組 \(.\),而 \1 是呼叫第一組 \(.\)。例如:12r21,cfrfc,7grg7 等都會被替換成 test。

\< 匹配字(word)首。所謂 word 包括文數字及底線。
\> 匹配字尾。這就是前所提及的限定用法,被 \<,或 \>括住的 pattern 就會被限制住,使 regexp 不能再向右(左)擴充解釋。

在 Vim 中 \b 是表示 <BS>即 Backspace 鍵。

[[實例]] :%s/\<abbbc\>/test/g
這樣只有 abbbc 才會被替換成 test。如果沒有這樣限定,:%s/abbbc/test/g,那 deabbbcly 中的 ``abbbc'' 亦會被替換成 test。所以前面 :%s/The\<All/test/g 可換成 :%s/\<The\>\|\<All\>/test/g 這樣一來,There 就不會被替換成 testre 了!

[[實例]] :%s/\<abbbc/test/g 這樣的話,只要是以 abbbc 為首的字(word),其中的 abbbc 的部份都會被 test 所替換。注意!是指字首,而不是指行首。所以 abbbc,abbbcerd ,abbbckijuds 都符合。

\{n,m} 指前所綁住的字元或字元集合最少出現 n 次,最多出現 m 次。

這在一般的 regexp 表示成 \{n,m\}。以下會舉四種不同的例子:

[[實例]] \{最小值,最大值}
[0-9]\{3,4} 匹配至少三位數,但不可多於四位數的數目字。如:
123
12
1
123456
1234567
12345678
1234
12345

如果下 :%s/[0-9]\{3,4}/test/g 的話,那 1,12 這兩組不會被替換,因為不滿 3 位數。而 12345,則會換成 test5。123456,則會換成 test56。12345678 ,則會換成 testtest。1234567 也是會換成 testtest。123,1234 這兩組則會被替換成 test。您可以親自操作一次就知道怎麼一回事了。操作時最後加 gc 來 confirm,這樣您會更瞭解實際替換的內容。ㄟ,別忘了 u 可以回複您的編輯動作。

[[實例]] \{數目字}
xy\{20} 表示 x 後接 20 個 y。 e[x-z]\{4} 表示 e 後接有四個字元,是 x,y,z 的其中一個的組合。如:exxxx, exyyz, ezzyz, exyzz 皆符合。

[[實例]] \{最小值,}
xy\{2,} 表 x 後接至少二個的 y。相當於 xyyy* 或 xyy\+。

[[實例]] \{,最大值}
xy\{,4} 表 x 後接至多四個或更少的 y (可能沒有)。因此 x, xy, xyy ,xyyy, xyyyy 皆符合。

替代變數
代表置換時合於 patern 的字元或字串。

[實例] :%s/\d\d\d\d\d\d\d\d\d\>/ID:&/g
這樣全文中的身份證字號前就會加上 ID: 字樣,也就是說 T123456789 會被換成 ID:T123456789。還記得嗎? \d 就是 [0-9]\u 代表大寫的英文字母。加個 \>是防止 T12345678999 也被換掉。當然前面再加個 \<更保險。ID: 字樣您用中文也行!另一個好用的例子是電話號碼前加上 TeL:,就請您自行練習了!

[實例] 將檔案 3 至 7 行的資料向右移 2 個空白
:3,7s/.*/ &/
但這樣連空白行也是會插入空白字元,較高明的做法是:
:3,7s/.\+/ &/
這樣空白行就不會去動它了!想通了 .*.\+ 的意思了嗎?往前翻一下 . * \+ 的定義。

[實例] 將檔案 3 至 7 行的資料向左移 2 個空白
:3,7s/^ //
就是刪去行首的二個空白啦!

[實例] 將全文的 Edward 這個單字,前後加上中括號
:%s/\<Edward\>/[&]/g

[實例] 將全文的 Edward 這個單字,改成大寫的。
:%s/\<Edward\>/\U&/g

\U 不是代表非大寫字母嗎?喔!您搞錯位置了。\U 在 pattern 的位置的時候是指非大寫字母的樣式,即 [^A-Z],但如果是在置換字串位置的時候是指將其後的字串通通改成大寫。與其相對的是 \L,會將其後的字串改為小寫。詳細請 :h sub-replace-special。

[實例] 將全文每行最後加上 <BR>這個 HTML tag。
:%s/.*/SPMamp;<BR>/g

[2010.01.23 補充]
[實例] 把所有的字串改為1000的倍數
:%s/\d\{3\}$/000/g
:g/[0-9][0-9][0-9]$/s//000/g
感覺起來,g/應該就是把文章內容依後面的patter尋找到的資料存到暫存器中,並且,把暫存器的內容再做之後的動作(/s//000/g)。

[2017.03.03 補充]
把英文單字只保留頭尾,中間用底線取代
例:
good
help
student
school
會變成
g _ _ d
h _ _ p
s _ _ _ _ _ t
s _ _ _ _ l
參考
%s/\<\@<!.\>\@!/_/gc
參考資料:
正規表示式的應用
規則表示式的運用

2009年12月14日 星期一

在右鍵選單用「新視窗」開啟資料夾

當我們想要比對資料夾的檔案內容時,可能會分別開啟視窗方便操作,因此我們可以直接在右鍵選單中加上「在新視窗打開」的功能,只要在資料夾右鍵選單中點選這個項目,就可以開啟新視窗顯示資料夾的內容了。

1.開啟「登錄編輯程式」視窗後,在左邊窗格找到「HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell」機碼,並在該機碼上按一下滑鼠右鍵 ,從選單中點選【新增】→【機碼】。

2.將新機碼的名稱設定為「NewWindow」,然後在右邊窗格的「預設值」項目上按一下滑鼠右鍵 ,從選單中點選【修改】。

3.出現「編輯字串」對話盒後,在「數值資料」空白框中輸入「在新視窗打開」,然後按下〔確定〕。

4.接著在左邊窗格的「NewWindow」機碼上按一下滑鼠右鍵 ,從選單中點選【新增】→【機碼】。然後將新機碼的W稱設定為「command」,並在右邊視窗的「預設值」項目上按一下滑鼠右鍵 ,從選單中點選【修改】。

5.「編輯字串」對話盒出現後,在「數值資料」空白框中輸入「explorer.exe %1」,再按下〔確定〕。重新開機之後,在資料夾上按一下滑鼠右鍵 ,選單中就會出現【在新視窗打開】這個項目,點選之後就會以新視窗開啟資料夾的內容了。

※還原方法:在Step2中的「NewWindow」機碼上按一下滑鼠右鍵 ,從選單中點選【刪除】,刪除之後重新登入或開機即可。

參考資料:
一乙電腦維修站---在右鍵選單用「新視窗」開啟資料夾

2009年12月13日 星期日

皇池溫泉

星期五(12/11),我們的team有舉辦一個活動!
一起去北投皇池泡溫泉~

在泡之前,先一起吃飯,他們的粥聽說非常有名,吃起來還真的蠻不一樣的!以下是一部分的照片~




第一次那麼多人一起泡溫泉,而且是全裸的!

還好我當過兵,什麼場面我沒有見過!馬上就融入那一個場景了!

全部都泡過,有冷泉、溫泉、蒸氣室、三溫暖,算是另外見了一次世面!不錯!

這一整層都是我們的team,有參加這次的聚會有50多人~

健康結果

上個月公司檢查的結果出來啦~

異常的部分
BMI:25.2
正常標準值:18.5~24
理想體重:61.6

TG (三酸甘油脂):282
正常標準值:50~200 mg/dl

C-RP (C反應蛋白):陽性
正常:陰性

以後可能會常熬夜,先把GOT、GPT記錄下來:
GOT:20
正常值:5~40 IU/L

GPT:37
正常值:5-42 IU/L

2009年12月12日 星期六

關掉XP不必要的服務讓你的系統更安全

[系統][教學] 關掉 XP 不必要的服務讓你的系統更安全


服務其實是Win 2000/XP/2003中一種特殊的應用程式類型,不過它是在後台運行,所以我們在工作管理員看不到它。

安裝Win XP後,通常系統會默認啟動許多服務,其中有些服務是普通用戶根本用不到的,不但佔用系統資源,還有可能被黑客所利用。

查看正在啟用的服務項目

以Win XP為例,首先你要使用系統管理員賬戶或以擁有Administrator權限的用戶身份登錄,然後在「運行」中輸入「cmd.exe」打開命令行窗口,再輸入「net start」回車後,就會顯示出系統正在運行的服務

為了更詳細地查看各項服務的訊息,我們可以在「開始→控制面板→管理工具」中雙擊「服務」,或者直接在「運行」中輸入「Services.msc」打開服務設置窗口

關閉、禁止與重新啟用服務

服務分為三種啟動類型:

1.自動:如果一些無用服務被設置為自動,它就會隨機器一起啟動,這樣會延長系統啟動時間。通常與系統有緊密關聯的服務才必須設置為自動。

2.手動:只有在需要它的時候,才會被啟動。

3.已禁用:表示這種服務將不再啟動,即使是在需要它時,也不會被啟動,除非修改為上面兩種類型。


如果我們要關閉正在運行的服務,只要選中它,然後在右鍵菜單中選擇「停止」即可。
但是下次啟動機器時,它還可能自動或手動運行。

如果服務項目確實無用,可以選擇禁止服務。在右鍵菜單中選擇「屬性」,然後在「常規→啟動類型」列表中選擇「已禁用」,這項服務就會被徹底禁用。

如果以後需要重新起用它,只要在此選擇「自動」或「手動」即可;也可以通過命令行「net start Alerter 一般家用電腦根本不需要傳送或接收電腦系統管理來的警示(Administrative Alerts)
建議:停用

Application Layer Gateway Service
如果你不使用因特網聯機共享 (ICS) 提供多台電腦的因特網存取和因特網聯機防火牆 (ICF)軟件你可以關掉
建議:手動

Application Management (應用程式管理) 軟件安裝變更的服務
建議: 手動

Automatic Updates 允許Windows於背景自動聯機之下,微軟到 MicrosoftServers 自動檢查和下載更新修補程式
建議:停用

Background Intelligent Transfer Service 使用閒置的網路頻寬來傳輸數據。
建議: 停用

ClipBook (剪貼簿)
啟用剪貼簿檢視器以儲存訊息並與遠程電腦共享。如果這個服務被停止,剪貼簿檢視器將無法與遠程電腦共享訊息。
建議: 停用

COM+ Event System (COM+ 事件系統) 有些程式可能用到 COM+ 組件,像 BootVis 的 optimize system 應用,如事件檢視器內顯示的 DCOM 沒有啟用
建議: 手動

COM+ System Application 管理 COM+ 組件的設定及追蹤。如果停止此服務,大部分的 COM+ 組件將無法適當運作。如果此服務被停用,任何明確依存它的服務將無法啟動。
建議: 手動

Computer Browser (電腦瀏覽器) 一般家庭用電腦不需要,除非你的電腦應用在區網之上.
建議: 停用

Cryptographic Services 簡單的說就是 Windows Hardware Quality Lab (WHQL)微軟的一種認證,如果你有使用 Automatic Updates ,那你可能需要這個
建議: 手動

DHCP Client (DHCP 客戶端) 使用 DSL/Cable 、ICS 和 IPSEC 的人都需要這個來指定動態 IP
建議: 手動

Distributed Link Tracking Client (分佈式連結追蹤客戶端) 維護區網內不同電腦之間的檔案連結
建議: 停用

Distributed Transaction Coordinator (分佈式交易協調器) 一般家庭用電腦用不太到,除非你啟用的 Message Queuing
建議: 停用

DNS Client (DNS 客戶端) 解析並快取這台電腦的網域名稱系統 (DNS) 名稱,IPSEC需要用到
建議: 手動

Error Reporting Service 微軟的應用程式錯誤報告
建議: 停用

Event Log (事件記錄文件) 啟用 Windows 為主的程式和組件所發出的事件訊息可以在事件檢視器中檢視
建議: 自動

Fast User Switching Compatibility 在多使用者環境下提供應用程式管理,另外像是註銷畫面中的切換使用者功能
建議: 手動

Help and Support 讓說明及支持中心能夠在這台電腦上執行。如果這個服務停止,將無法使用說明及支持中心。
建議: 停用

Human Interface Device Access 啟用對人性化接口裝置 (HID) 的通用輸入存取,使得裝置啟動並維護對這個鍵盤、遠程控制、以及其它多媒體裝置上事先定義的快捷紐的使用。
建議: 停用

IMAPI CD-Burning COM Service XP 整合的 CD-R 和 CD-RW 光驅上拖放的燒錄功能,可惜比不上燒錄軟件,關掉還可以加快Nero的開啟速度
建議:停用

Indexing Service (索引服務) 本機和遠程電腦的索引內容和檔案屬性,透過彈性的查詢語言提供快速檔案存取。
建議:停用

Internet Connection Firewall (ICF) / Internet Connection Sharing (ICS)如果你不使用因特網聯機共享(ICS)或是 XP 內含的因特網聯機防火牆(ICF)你可以關掉
建議: 手動

IPSEC Services (IP 安全性服務) 協助保護經由網路傳送的數據。IPSec 為一重要環節,為虛擬私人網路 (VPN) 中提供安全性,而 VPN 允許組織經由因特網安全地傳輸數據。在某些網域上也許需要,但是一般使用者大部分是不太需要的
建議: 手動

Logical Disk Manager (邏輯磁盤管理員) 磁盤管理員用來動態管理磁盤,如顯示磁盤可用空間等和使用 Microsoft Management Console(MMC)主控台的功能
建議: 自動

Logical Disk Manager Administrative Service (邏輯磁盤管理員系統管理服務)設定硬碟磁盤及磁盤區,服務只執行設定程式然後就停止。
建議: 手動

Messenger 允許網路之間互相傳送提示訊息的功能,如 net send 功能,如不想被騷擾話可關了
建議:停用

MS Software Shadow Copy Provider 管理磁盤區陰影複製服務所取得的以軟件為主的磁盤區陰影複製。如果停止這個服務,就無法管理以軟件為主的磁盤區陰影複製.
建議:停用

Net Logon 一般家用電腦不太可能去用到登入網域審查這個服務
建議:停用

NetMeeting Remote Desktop Sharing (NetMeeting 遠程桌面共享) 讓經過授權的使用者可以使用 NetMeeting 透過公司近端內部網路,由遠程訪問這部電腦,如果你重視安全性不想多開後門,就關了吧.
建議:停用

Network Connections (網路聯機) 控制你的網路聯機
建議: 手動

NetworkDDE(網路 DDE) 為動態數據交換 (DDE) 對在相同或不同電腦上執行的程式提供網路傳輸和安全性。
建議:停用

Network DDE DSDM (網路 DDE DSDM) 訊息動態數據交換 (DDE) 網路共享。
建議:停用

Network Location Awareness (NLA) 如果不使用 ICF 和 ICS 可以關了它
建議:停用

NT LM Security Support Provider (NTLM 安全性支持提供者) 如果不使用Message Queuing 或是 Telnet Server 那就關了它
建議:停用

Performance Logs and Alerts (效能記錄文件及警示) 基於事先設定的排程參數,從本機或遠程電腦收集效能數據
建議:停用

Plug and Play 啟用電腦以使用者沒有或很少的輸入來識別及適應硬件變更,停止或停用這個服務將導致系統不穩定。
建議: 自動

Portable Media Serial Number 透過聯機電腦重新取得任何音樂撥放序列號
建議:停用

Print Spooler (列印多任務緩衝處理器) 將檔案加載內存中以待稍後列印。如果沒有印表機,可以關了
建議:停用

Protected Storage (受保護的存放裝置) 用來儲存你電腦上密碼的服務,像 Outlook、撥號程式、其它應用程式、主從架構等等
建議: 自動

QoS RSVP (QoS 許可控制,RSVP) 用來保留 20% 頻寬的服務,如果你的網路卡不支持 802.1p 或在你電腦的網域上沒有 ACS server ,那麼不用多說,關了它
建議:停用

Remote Access Auto Connection Manager (遠程訪問自動聯機管理員)當程式參照到遠程 DNS 或 NetBIOS 名稱或地址時,建立遠程網路的聯機。
建議: 手動

Remote Access Connection Manager (遠程訪問聯機管理員) 建立網路聯機
建議: 手動

Remote Desktop Help Session Manager 管理並控制遠程協助。如上說的管理和控制遠程協助,如果不使用可以關了
建議:停用

Remote Procedure Call (RPC) (遠程過程調用,RPC) 提供結束點對應程式以及其它 RPC 服務。
建議: 自動

Remote Procedure Call (RPC) Locator (遠程過程調用定位程式) 管理 RPC 名稱服務數據庫。
建議: 停用

Remote Registry (遠程登錄服務) 啟用遠程使用者修改這個電腦上的登錄設定。建議最好關了它,除非你需要遠程協助修改你的登錄設定
建議: 停用

Removable Storage (卸除式存放裝置) 除非你有 Zip 磁盤驅動器或是 USB 之類可攜式的硬件或是 Tape備份裝置,不然可以嘗試關了
建議:停用

Routing and Remote Access (路由和遠程訪問) 提供連到局域網路及廣域網路的公司的路由服務。如上說的,提供撥號聯機到區網或是 VPN 服務,一般用戶用不到
建議: 停用

Secondary Logon 啟用在其它認證下的起始程式。允許多個使用者處理程式,執行分身等
建議:自動

Security Accounts Manager (安全性賬戶管理員) 儲存本機賬戶的安全性訊息。管理賬號和群組原則(gpedit.msc)應用
建議: 自動

Server (服務器) 透過網路為這台電腦提供檔案、列印、及命名管道的共享。如果停止這個服務,將無法使用這些功能。簡單的說就是檔案和列印的分享,除非你有和其它電腦分享,不然就關了
建議:停用

Smart Card (智慧卡) 管理這個電腦所讀取智能卡的存取。如果這個服務被停止,這個電腦將無法讀取智能卡。如果你不使用 Smart Card ,那就可以關了
建議: 停用

Smart Card Helper (智能卡協助程式) 啟用對這個電腦使用的舊版非隨插即用智能卡讀取頭的支持
建議: 停用

SSDP Discovery Service 在您的家用網路上啟用通用隨插即用裝置的搜索。
如上說的,通用隨插即用服務
(Universal Plug and Play, UPnP) 讓電腦可以找到並使用網路上的裝置,經由網路聯機透過 TCP/IP 來搜索裝置,像網路上的掃瞄器、數字相機或是印表機,亦即使用 UPnP 的功能,基於安全性沒用到的大可關了
建議: 停用

System Event Notification (系統事件通知) 追蹤諸如 Windows 登入、網路、和電源事件的系統事件。通知這些事件的 COM+ 事件系統訂閱者。
建議: 自動

System Restore Service 執行系統還原功能。若要停止服務,從我的電腦→內容,[系統還原] 中關閉系統還原
建議:停用

Task Scheduler (工作排程器) 讓使用者能夠在這個電腦上設定和排定自動的工作。設定排定自動的工作,像一些定時磁盤掃瞄、病毒定時掃瞄、更新等等
建議: 自動

TCP/IP NetBIOS Helper(TCP/IP NetBIOS 協助程式)啟用 [NetBIOS over TCP/IP (NetBT)]服務及 NetBIOS 名稱解析的支持。
建議:停用

Telephony (電話語音) 為本機電腦上及經由局域網路連接到正在執行此服務的服務器上,控制電話語音裝置和 IP 為主語音聯機的程式,提供電話語音 API (TAPI) 支持。
建議: 手動

Telnet 啟用一個遠程使用者來登入到這台電腦和執行應用程式,以及支持各種TCP/IP Telnet 客戶端,包含以 UNIX 為基本和以 Windows 為基本的電腦。允許遠程使用者用 Telnet 登入本電腦,一般人會誤解關了就無法使用BBS,這其實和BBS無關,基於安全性的理由,如果沒有特別的需求,建議最好關了
建議: 停用

Terminal Services (終端機服務) 允許多位使用者互動連接到同一部電腦、桌面的顯示器及到遠程電腦的應用程式。遠程桌面的加強 (包含系統管理員的 RD)、快速切換使用者、遠程協助和終端機服務器。
建議:停用

Themes 提供使用者經驗主題管理。 建議: 自動

Uninterruptible Power Supply (不斷電供電系統) 微軟:管理連接到這台電腦的不斷電電源供應 (UPS)。
建議:停用

Universal Plug and Play Device Host 提供主機通用隨插即用裝置的支持。
建議: 停用

Volume Shadow Copy 管理及執行用於備份和其它目的的磁盤區卷影複製。
建議: 停用

WebClient 使用 WebDAV 將檔案或數據夾上載到所有的 Web 服務,M業W2WHebyRT基於安全性的理由,你可以嘗試關閉 。
建議: 停用

Windows Audio 管理用於 Windows 為主程式的音訊裝置。 建議: 自動

Windows Image Acquisition (WIA) (Windows影像取得程式)為掃瞄器和數字相機提供影像擷取服務。如果掃瞄器和數字相機內部具有支持WIA功能的話,那就可以直接看到圖檔,不需要其它的驅動程式,所以沒有掃瞄器和數字。相機的使用者大可關了
建議: 停用

Windows Installer (Windows 安裝程式) 根據包含在 .MSI檔案內的指示來安裝,修復以及移除軟件。
建議: 手動

Windows Management Instrumentation
(WMI) 提供公用接口及對像模型,以存取有關操作系統、裝置、應用程式及服務的管理訊息。
建議: 自動

Windows Management Instrumentation Driver Extensions
(Windows Management Instrumentation 驅動程式延伸)提供系統管理訊息給予/取自驅動程式。
建議: 手動

Windows Time (Windows 時間設定) 維護在網路上所有客戶端及服務器的數據及時間同步處理。
建議:停用

Wireless Zero Configuration 為802.11 適配卡提供自動設定。
建議:停用

WMI Performance Adapter 提供來自 WMIHiPerf 提供者的效能鏈接庫訊息。
建議: 停用

Workstation (工作站) 建立並維護到遠程服務器的客戶端網路聯機。
建議: 自動

把Windows XP內建的壓縮功能關掉
STEP1:在桌面左下角的「開始」按一下滑鼠左鍵,從開始功能表中點選「執行」,在「執行」對話盒出現後,在「開啟」方框中輸入「regsvr32 /u zipfldr.dll」指令,然後按下「確定」。

STEP2:如果指令輸入正確,畫面上會出現如圖中的「RegSvr32」的提示對話盒,直接按下「確定」,就可以順利將Windows XP的解壓縮功能給關掉了。

如果要重新啟動Windows XP內建的壓縮功能,則只要按照相同的步驟,在STEP2的對話盒中輸入「regsvr32 zipfldr.dll」指令,再按下「確定」即可。

參考資料:
系統 - 關掉XP不必要的服務讓你的系統更安全
把Windows XP內建的壓縮功能關掉

2009年12月10日 星期四

透過visual c++ express來debug

在Linux下,要debug可以使用gdb,雖然我不熟!

而在windows下呢?前幾天才學到可以用visual c++

express
來協助debug,單步執行、觀察某一個變數,之類的~

假設我們要trace某一個檔案,叫作HelloWorld.c

1. 先用visual C++ 2008 Express去開啟HelloWorld.c,不需要打開project檔

2. 加入中斷點,例如在Value那一行加入一個中斷點,表示會停在Value = 77;這一行指令執行前

3. 先執行shell的環境,如下圖

4. 到visual C++ 2008 Express的: 工具->附加至處理序

5. 加入目前這一個shell的環境的應用程式,可以由「標題」可以找到目前的shell是用哪一個,如下圖:

6. 接下來到shell執行helloworld這一個執行檔,系統就會自動跑到visual C++ 2008的追code環境啦

然後,就可以一步一步去追程序啦!

2009年12月1日 星期二

榮星花園附近的美食 - TO Eat List

既然住在這附近,當然要了解這附近的美食囉!

發爺燒肉
上個禮拜跟研究所的室友一起去吃的!
賣點是服務員會幫你燒海鮮,缺點就是不是女服務生幫你烤的!!

AMIGO米格墨西哥飲食文化

醬子義大利麵舖

肥牛燒肉

火燒牛

PChome休閒

嚇酷!美食網

美食地圖

灣仔茶餐廳
在錦州街上的一個餐廳,因為這一個週末是NTC的最後一個週末,所以,大家約出去吃!
還可以,不過,在結帳的時候,女服務生服務很差,我們要分開付,她一付臉很臭的樣子!(2010.01.08)我哩!最後是我另一個同事,幫她在前面收集好錢,再一起付給她!

燒麻糬 (遼寧夜市)
聽說不錯吃!改天去吃吃看~

2009年11月30日 星期一

Source Insight的設定

在Windows下Source Insight真是超好用的!

它可以幫你追程式碼,在追程式的時候非常好用!雖然,我在Windows下主要的編輯器還是GVim,不過在追程式,還是不得不使用Source Insight。

因為,公司有一些Coding Rule,像是不要使用Tab鍵,必需使用空白鍵來代替。所以,基本上要做一些設定。

字體
Options→Document Options→Screen Fonts
可以設定為FixedSys,蠻好看的

把Tab鍵轉為空白鍵
Options→Document Options→Expand tabs
並且設定為每一個tab轉為幾個空白鍵
Options→Document Options→Tab width
我是設定為2

關掉Auto Indent
通常在加入大小括號時,系統會自動的幫你調整其位置,但是,常常不是我想要的,因此,把這一個功能關掉似乎是不錯的選擇!
Options→Document Options→Auto Indent
把Auto Indent Type設定為Simple

載入設定檔
其實還有很多東西不知道要怎麼設定,像是背景要是黑色的啦~剛好,公司有一個設定檔,直接依設定檔去修改就好!那麼如何把設定檔載入到預設值呢?
Options→Load Configuration按Load再來選擇設定檔啦!

參考資料:
Source Insight v.s SlickEdit® 2007
Source Insight 方便 coding 的設定
SourceInsight使用技巧

2009年11月24日 星期二

在windows下使用Linux的應用程式的方案

之前在Linux環境下,使用到一堆非常好用的小工具,像是vim(在Windows下可以使用GVim的替代方案), sed, find, awk, diff, grep, xargs都是在寫程式時,非常好用的小工具,而目前改到Windows下寫程式,沒有了這一些小工具真的非常的不方便!

當然啦,在windows下有許多方式可以使用到linux下的指令
1. 利用虛擬機器(vmware, virtualbox),就直接在windows上面灌linux系統,當然就可以使用linux指令啦
2. 使用偽虛擬機器(Cygwin),因為它並沒有完整的模擬Linux系統,不過,相對於第一個方法,它倒是簡單許多
3. native porting,不必像Cygwin那樣拖著一個大大的 unix emulation layer,像是GNUWin32UnxUtils都是非常完整的把Linux下的小工具porting到windows下的project,而且其中的每一個小程式都可以單獨使用,像是如果你只想要使用sed,那你就把sed.exe放的資料夾的路徑加入系統的Path中,這樣每一次就可以使用了。

而我目前用的最順的是使用GNUWin32,真的是超好用的啦!

目前有遇到一個問題就是,windows系統也有內建find.exe這一個執行檔,當然要使得我每一次把find.exe會找到GNU的find.exe只要把我的路徑放在系統Path的最前面就好,但是呢,我怕這樣會讓系統某一些程式使用到find.exe會出現錯誤。目前我有一個想法,就是做一個bat檔,當我要執行Linux環境時,就執行這一個bat檔,它會「暫時」的把Path只設定成我目前的路徑,如此一來,當我打find.exe時,就會真的執行到由Linux下的find而porting到windows下的find.exe啦,另一個方法可能就是改名字吧,把linux下的find.exe改名為其它名字

另外要注意的一點是,在放置執行的路徑中,最好不好有空白存在,不然會出現問題!

[2009.12.08 補充]
上面提到,因為GNUWin32的find.exe與windows下的find.exe會有衝突,所以,我們要自己建立一個.bat可以暫時的修改PATH,讓它只有指到GNUWin32\bin。
gnuwin32.bat
@echo off
cd d:\
SET PortableRootDir=D:
PATH=%PortableRootDir%\Portable\PortableApps\gnuwin32\bin;%PortableRootDir%\Portable\PortableApps\gVimPortable
%SystemRoot%\system32\cmd.exe /k

其中PATH就是放gnuwin32\bin的位置,如此一來,就可以使用GNUWin32的find.exe而不會與windows下的find.exe有所衝突了

參考資料:
GNUWin32
vmware
virtualbox
Cygwin
UnxUtils
GNU utilities for Win32 (Unxutils)
輕鬆學會 MSYS + MinGW ---- 在 Windows 底下重新編譯 GNU 程式
[筆記] Linux.find+grep.screen.vimdiff + vi 設定檔+Visual block

2009年11月19日 星期四

WinMerge

之前,一開始看到這一個軟體的時候,以為它是同步資料夾的軟體!
不過,用了半天還是看不懂怎麼用!

因為我們工作有在跟ODM與OEM一起team work,有時候解完一個issue後,傳給對方,對方也可能會解一些issue,同時間,我們可能也在解另一個問題!

當我們兩個版本要合起來的時候,就不知道到底差在哪裡!

身為一個資訊人員,我們必需要善用可以幫我們節省時間的工具,沒有錯,公司買的{我忘了}是要錢的,而WinMerge是不用錢的,而且是Portable的喔!超棒的,它可以幫我們比較兩個檔案之間的差異呢!

以後應該很有機會會用到,先收起來吧!

相關資料:
WinMerge

2009年11月18日 星期三

電鍋蒸蛋

最近嘗試使用電鍋來蒸蛋,兩天試下來的結果,都會黏鍋。
所以,就上網找一下如何可以蒸出漂亮的蛋!

==============================================================
大同電鍋怎麼蒸蛋才不會黏鍋?
首先步驟的問題??

1.你把2顆蛋要用大碗打發開,打的蛋白蛋黃分不清而成為一體。

2.再邊打邊加入以下任何一碗量的水(水裡可加入些許太白粉)、或冷高湯、或牛奶或三種的混合,也要打到成為一體。

3.最後加入材料,直接放入(大同電鍋)外鍋裡,放1碗半~2碗的水直接蒸8~12分(水滾開有蒸氣時起計)。

4.蒸蛋溫度不能太高,否則蛋皮發皺,內部有氣泡孔,蛋太老不好看又不好吃,解決的方法非常簡單,蓋子兩邊要放筷子,讓蒸氣跑出來,目地就是不要太熱,保持恆溫即可。

5.起鍋出菜前,記得關電源(拔插頭)後,等3~5分(待溫度降低些)再開蓋就OK~~~!

參考資料:
大同電鍋怎麼蒸蛋才不會黏鍋

2009年11月17日 星期二

洗冷水澡

洗冷水澡好處多多,除了可以省瓦斯之外,對身體也比較健康喔!
不過,要開始的話,最好由夏天開始洗,這樣才可以慢慢習慣冷水澡!
我今年夏天就開始洗了,到現在冬天還在洗,很爽喔!
不過,今天開始懷疑到底是好還是不好,所以上網查了一下資料,感覺好像是不錯的!
做事情啊,最怕把錯的事情一直當作是正確的,還一直很努力去做,
方向對是很重要的!
==============================================================================
洗冷水澡時,剛開始的1至2分鐘皮膚表面會因冷水收縮變白,血液會往深層的內臟部位流,但洗了2至3分鐘等身體適應後,血液會重新分配,血液再重新回流到皮膚表面,皮膚會逐漸發紅,整個過程就像做血管體操一樣。

這樣做
孫安迪博士表示,要讓自己習慣洗冷水澡,最好從夏天起鍛鍊,等身體能適應,連冬天都可洗冷水澡。

要先熱身
與運動一樣,要洗冷水澡也要先熱身,可讓身體動一動,或用手搓揉皮膚數分鐘,讓皮膚有點發紅發熱,搓揉時也能做筋絡的按摩。

不宜太長
沖冷水澡到泡冷水浴,整個過程不能太久,約10幾分鐘,最長不要超過半小時,若經常洗冷水澡,身體狀況又不錯,則可採冷熱交替的三溫暖方式,效果會更好,但一定要在身體狀況很好的情況下才能嚐試。

洗後保暖
洗冷水浴除時間不能太長外,洗完後也要馬上裹上浴巾或穿上浴袍,並立即穿好衣服保暖,以免著涼。

先沖四肢
為讓身體慢慢適應冷水,洗冷水澡時,要先沖再泡,沖時也要注意先從手腳四肢開始沖數分鐘後,最後再沖胸部,以免太刺激,身體會受不了。

可加精油
泡冷水澡時間最好不要超過5分鐘,泡澡時可以加上一些精油。孫安迪博士表示,他個人喜歡加上一點薄荷可以讓身體完全地放鬆,晚上洗個冷水澡之後,可立即上床睡覺,便可睡得十分安穩。

不適要停
洗冷水澡的時候,如果覺得很冷且發抖、皮膚持續變白、頭昏等身體不適的情況時,要立即停止,千萬不要逞強。

多注意
洗冷水澡對身體很好,但不是每個人都可嚐試,有下列情況,就不要洗冷水澡,而冬天天氣冷,除非已經習慣洗冷水澡或身體十分強壯,否則不要輕易嚐試。

冷水澡禁忌

高血壓
有頸部痠痛、頭昏頭痛等高血壓症狀時,不要洗冷水澡,因為洗冷水澡時,血管會急速收縮,使血壓飆高。

心臟病
洗冷水澡時血液急速往心臟衝,會使心臟無法負荷。而肝、腎、肺功能不佳的人,同樣也因器官可能無法負荷,不適合洗冷水澡。

喝完酒
喝酒後,皮膚的毛細孔全開,洗冷水澡時,又會因冷水急速收縮,衝擊太大,會使身體無法承受。

激烈運動後
從事激烈運動時,與喝酒一樣,會因流汗發熱,使皮膚毛細孔全開,立即沖涼,會令身體受不了。

氣血不足
女性在月經、懷孕與生產坐月子期間,因為身體較虛,氣血不足,血液循環差,較不適合洗冷水澡做血管體操。

剛吃飽
吃飯時,血液會往胃部流幫助食物消化,若馬上洗冷水澡,會使血液從胃部流到身體其他內臟,影響消化,要在飯後半小時才能洗冷水澡。

身體不適
感冒發燒或有任何發炎等身體不適時,因身體虛弱,不適合再洗冷水澡。

好處多
當兵時抽中「金馬獎」,在馬祖當兵的孫安迪博士表示,當時因馬祖熱水缺乏,就養成洗冷水澡習慣,即使是天氣冷到結霜、耳垂都起水泡凍傷,照樣洗冷水澡,也親身體驗洗冷水澡好處多多。

不易感冒
經常感冒免疫力差的人,可多洗冷水澡增加身體耐冷度,提升免疫力。加上血液會往內臟流,可將內臟毒素往外帶,促進內臟新陳代謝。

助眠安神
心跳加快、口乾舌燥會自律神經失調等,洗冷水澡可讓自律神經不亢奮,有助眠安神。

有助消化
洗冷水澡可促進腸胃蠕動,提高消化功能,但飯後半小時內不要洗冷水澡,以免血液快速從胃部流出,易消化不良。

皮膚有彈性洗冷水對身體有害嗎?
常常洗冷水澡,可以讓血液往皮下組織流動,也可以讓皮膚變得更加柔軟有彈性。

台大免疫學博士孫安迪
專家說台灣夏天溫度高,即使洗冷水澡,水的溫度在攝氏30度左右,水溫不會太低,所以即使是小嬰兒,只要身體沒有不適的情況,也可洗冷水澡,洗時可上下搓揉皮膚,刺激皮下組織的筋絡,讓身體感到更舒服。

參考資料:
洗冷水對身體有害嗎?

2009年11月15日 星期日

新訓必要的物品

最近朋友在問,要新訓了,要帶什麼東西,我想了一下,就順便記下來吧!
其實,PTT的Militarylife版有蠻多資料的,都可以去那裡參考!

1. 爽身粉
2. 電話卡,親友通訊錄
3. 零錢(最好分開放,新訓會用到二~三千元)
4. 畢業証書(專長分類可能會用到)
5. 証件(份證正、影本,健保卡...)
6. 若有戴眼鏡,多帶一份備份的
7. 治便秘的藥
8. 感冒的成藥
9. 耳塞
10. 內衣 內褲多帶幾件
11. 筆, 修正液
12. 手錶
13. 兵單
14. 戶籍謄本身
15. 郵局存摺封面影本
16. 生活照

KBC (Keyboard Control)

Keyboard Controller Functions
B生的部落格: ●8042 Keyboard Controller
關於 Keyboard controller 的一些問題 / 組合語言 / 程式設計俱樂部

2009年11月13日 星期五

Debug

噗!
今天大家寫作業寫到很晚,大部分的時間是在Debug,真是太high啦(反諷法)!

記錄一下,今天花很多時間是在哪裡吧?
1. 編輯器(gVim)出現問題,當我寫入的時候,它沒有給我寫入,我花了約半個時候左右吧!明明我有寫好,確給我出現問題。

有發生很多事情,突然要寫,就沒有印象了!

2009年11月12日 星期四

健康檢查

昨天公司健康檢查,其實之前都有檢查過,像是在學校的時候啦!
不過,我都沒有去記它!
希望開這一篇文章來記錄以後的所有健康檢查的結果!
一個月後,結果會出現!

USB如何防毒

前幾天去影印店印東西,用隨身碟來傳檔案,結果,昨天在插入其它人的電腦的時候,哇哩!
被發現有病毒!

本來有很多軟體是在隨身碟中建立Autorun.inf來防止病毒,但是,現在這一個方法似乎沒有用了!

看來現在只有防止寫的功能才能真正遏止病毒的寫入吧!

就是用讀卡機上面有防寫的開關,加上SD卡,就無敵啦~

2009年11月11日 星期三

聽力有問題?

之前跟我老媽聊天時,他常說我講話很大聲!
要聽課的時候,都必需要很認真聽才聽的清楚,也就是要很用力聽!
我想我必需要檢查一下聽力,真是期待改善之後,
就好像超級塞亞人習慣了100倍的重力之後,
回到地球,就好像要飛起來這樣!
真high!

剛剛看知識+
有時候不一定是耳的問題,也有可能是鼻子的問題哩

[分享] 台大醫院健康講座 [失聰與聽力保健]
台大醫院健康講座邀請台大醫院 楊庭華醫師向社會大眾介紹聽覺的重要性、
聽力的等級、分貝的強弱、聽力障礙的分類與治療、聽力的保健、耳鳴等

有興趣的朋友可以聽聽看這場精彩的演講喔!
演講網址: http://www.powercam.cc/slide/1243 (點選播放鍵即可閱讀,記得開喇叭!)

2009年11月8日 星期日

在vim中設定特殊字的顏色

寫過程式的人都知道,若整個程式的內容都是用白底黑字來顯示的話,會整個眼睛都花掉!
所以,現在大部分的程式編輯器都會根據某一種特定的檔案型態(像是.c檔或是.cpp檔)
則會把某一些特定的字顯示成不同的顏色(像是int, bool, float)。

而在vim編輯器中也不例外,現在寫的都是.c檔,但是,在UEFI中,會自己自訂一些型別,像是IN, OUT, BOOLEAN, INT...之類的。

在gvim中,所有類型的syntax設定檔均會放在syntax資料夾中,因為,我現在要設定.c檔的syntax,我直接到syntax資料夾中的c.vim去修改,新增以下內容
c.vim

if !exists("UEFI")
syn keyword cType BOOLEAN
syn keyword cType INTN INT8 INT16 INT32 INT64
syn keyword cType UINTN UINT8 UINT16 UINT32 UINT64
syn keyword cType CHAR8 CHAR16
syn keyword cType VOID CONST STATIC VOLATILE
syn keyword cConstant IN OUT OPTIONAL
syn keyword cConstant TRUE FALSE
syn keyword cConstant UNALIGNED
syn keyword cConstant EFI_RUNTIMESERVICE EFI_BOOTSERVICE
syn keyword cConstant EFI_BOOTSERVICE11 EFI_BOOTSERVICE20
syn keyword cConstant EFI_TIME_ADJUST_DAYLIGHT EFI_TIME_IN_DAYLIGHT
syn keyword cConstant EFI_UNSPECIFIED_TIMEZONE
syn keyword cType EFI_STATUS EFI_HANDLE EFI_EVENT EFI_TPL
syn keyword cStructure EFI_GUID EFI_GUID_UNION EFI_TIME
syn keyword cStructure EFI_SYSTEM_TABLE
syn keyword cStructure EFI_IPv4_ADDRESS EFI_IPv6_ADDRESS EFI_MAC_ADDRESS EFI_IP_ADDRESS
syn keyword cStructure EFI_MEMORY_TYPE EFI_ALLOCATE_TYPE
syn keyword cStructure EFI_STATUS_CODE_TYPE EFI_STATUS_CODE_VALUE
syn keyword cStructure EFI_STATUS_CODE_DATA EFI_TABLE_HEADER
syn keyword cConstant EFI_MEMORY_UC EFI_MEMORY_WC EFI_MEMORY_WT EFI_MEMORY_WB EFI_MEMORY_UCE
syn keyword cConstant EFI_MEMORY_WP EFI_MEMORY_RP EFI_MEMORY_XP
syn keyword cConstant EFI_MEMORY_PRESENT EFI_MEMORY_INITIALIZED EFI_MEMORY_TESTED
syn keyword cConstant EFI_MEMORY_PORT_IO
syn keyword cConstant EFI_MEMORY_RUNTIME
syn keyword cType EFI_PHYSICALL_ADDRESS EFI_VIRTUAL_ADDRESS
syn keyword cConstant EFI_MEMORY_DESCRIPTOR_VERSION
syn keyword cStructure EFI_MEMORY_DESCRIPTOR
syn keyword cConstant EFI_PAGE_SIZE EFI_PAGE_MASK EFI_PAGE_SHIFT
syn keyword cStructure EFI_PLABEL
syn keyword cStructure EFI_GCD_MEMORY_TYPE EFI_GCD_IO_TYPE EFI_GCD_ALLOCATE_TYPE
syn keyword cStructure EFI_GCD_MEMORY_SPACE_DESCRIPTOR EFI_GCD_IO_SPACE_DESCRIPTOR
endif


Q: 這裡有一個問題,應該是要設定成exists("UEFI")時,才顯示這一些型別的顏色,但是,現在不知道如何設定變數,所以,先暫時設定成每一次打開,都會以UEFI為顯示的方式,也就是設定為(!exists)!

另外,別人有寫出類似佈景主題的東西,可以到這裡下載

得知目前 Vim 的顏色配置的方法就是:
:highlight

參考資料:
更改 Vim 各項目的顏色

2009年11月6日 星期五

2009年11月3日 星期二

經驗必須被記取,歷史不能被遺忘

唐太宗曾言:「以銅為鏡,可以正衣冠;以史為鏡,可以知興替;以人為鏡,可以知得失。」

多去嘗試,會得到許多錯誤,做錯事不是問題,但是,連續兩次做錯事就是問題!自己就是自己的小歷史!只有多去嘗試,才會學到越多東西,在關鍵的時刻,才有出場的機會!

1. 若要買可以蒸飯的便當,不能太厚!不然會蒸不熟!太厚的便當(中間有一個真空層),主要是用來保溫的!

2. 太熱的東西不能放在木桌上,會出現白白的痕跡

3. 要開玩笑的話,最好開自己的玩笑!

4. 煮水餃:水滾了之後放水餃、再等水滾時加一碗水(冷水)、在滾了之後再加一次一碗水(冷水)、最後一次等水滾了再加一次一碗水(冷水),三次步驟水滾了之後趕快勞起來就熟了,這時的水餃才真正好吃皮也不會破。

5. 當業務員拉住你時,你有一點興趣,避免第一時間下決定,可以先跟他要個名片,如果之後有意願的話,還是找他!回去的時候,就可以到網路上找相關的資料,這個時候再下決定也不遲哩!

6. 講話不要太急,禍從口出、病從口入!

7. 省錢固然重要,但是,身體健康也要注意

8. 若住的是舊的公寓,則要注意水質!因為,水管老舊,自來水可能會有水銹!最好去買一個濾水器,像是蒸餾水飲水機或是逆滲透!

2009年11月1日 星期日

DOS指令

指令
cmd /?
可以看到很多指令的說明喔!非常棒!

•DOS指令•
C:\>help


若需某特定指定的資訊,請鍵入 HELP 指令名稱。
ASSOC 顯示或修改關聯的副檔名。
AT 將命令或程式的執行加以排程。
ATTRIB 顯示或變更檔案屬性。
BREAK 設定或清除延伸的 CTRL+C 檢查。
CALL 呼叫其他的批次程式。
CACLS 顯示或修改檔案的存取控制清單 (ACL)。
CD 顯示目前的目錄名稱或目錄變更。
CHCP 顯示或設定字碼頁號碼。
CHDIR 顯示目前的目錄名稱或目錄變更。
CHKDSK 檢查磁碟並顯示磁碟狀態。
CLS 清除螢幕。
CMD 啟動新的 Windows 2000 指令直譯器例項。
COLOR 設定預設主控台背景及前景顏色。
COMP 比較兩個或兩組檔案的差異。
COMPACT 顯示或變更在 NTFS 磁碟分割上的檔案壓縮。
CONVERT 將 FAT 磁區轉換為 NTFS。您不能轉換使用中的磁區。
COPY 將檔案複製到其它位置。
DATE 顯示或設定日期。
DEL 刪除檔案。
DIR 顯示檔案清單或子目錄清單。
DISKCOMP 比較兩個磁片的差異
DISKCOPY 將磁片內容全部複製到另一張磁片。
DOSKEY 編輯命令列,重新呼叫 Windows 2000 命令,建立巨集。
ECHO 顯示訊息,啟動或關閉 echo 功能。
ENDLOCAL 中止在批次檔案中的地區設定變更。
ERASE 刪除檔案。
EXIT 結束 CMD.EXE 程式 (指令直譯器)。
FC 比較兩個或兩組檔案的差異,並顯示結果。
FIND 搜尋檔案中的文字或字串。
FINDSTR 搜尋檔案中的字串。
FOR 為一組檔案指定個別檔案的執行命令。
FORMAT 格式化磁片以供 Windows 2000 使用。
FTYPE 顯示或修改副檔名關聯的檔案類型。
GOTO 指示 Windows 2000 指令直譯器,跳到有標示的指令行執行。
GRAFTABL 讓 Windows 2000 在圖形介面能夠顯示擴充字元集。
HELP 提供 Windows 2000 指令的說明資訊。
IF 執行邏輯判斷式。
LABEL 建立,變更,或刪除磁碟標籤。
MD 建立目錄。
MKDIR 建立目錄。
MODE 設定系統裝置。
MORE 設定螢幕顯示一頁後暫停。
MOVE 將檔案從目前的位置移動到同一磁碟中的其他目錄。
PATH 顯示或設定執行檔的搜尋目錄。
PAUSE 暫停批次檔案處理並顯示訊息。
POPD 還原先前經由 PUSHD 儲存的的現用目錄設定值。
PRINT 列印文字檔案。
PROMPT 變更 Windows 2000 命令提示字元。
PUSHD 儲存現用目錄,然後修改它。
RD 移除目錄。
RECOVER 恢復損壞磁碟的唯讀資訊。
REM 批次檔或 CONFIG.SYS 中的備註標記。
REN 重新命名檔案。
RENAME 重新命名檔案。
REPLACE 取代檔案。
RMDIR 移除目錄。
SET 顯示,設定,或移除 Windows 2000 環境變數。
SETLOCAL 啟始批次檔中地區設定的變更。
SHIFT 移動批次檔中可取代參數的位置。
SORT 排序輸入項目。
START 啟動一個獨立的視窗以執行指定程式或命令。
SUBST 將路徑對應到磁碟代號。
TIME 顯示或設定系統時間。
TITLE 設定 CMD.EXE 工作階段的視窗標題。
TREE 以圖形顯示磁碟目錄結構。
TYPE 顯示文字檔的內容。
VER 顯示 Windows 2000 版本編號。
VERIFY 告訴 Windows 2000 是否要檢查檔案寫入磁碟的正確性。
VOL 顯示磁碟標籤及序號。
XCOPY 複製檔案及目錄結構。




D:\>attrib /?
顯示或變更檔案屬性。

ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [[drive:] [path] filename]
[/S [/D]]

+ 設定屬性。
- 清除屬性。
R 唯讀檔案屬性。
A 保存檔案屬性。
S 系統檔案屬性。
H 隱藏檔案屬性。
/S 處理目前的資料夾及所有子資料夾中相符的檔案。
/D 一併處理資料夾。
============================================================
D:\>cd /?
顯示目前工作目錄的名稱或是變更目錄。

CHDIR [/D] [drive:][path]
CHDIR [..]
CD [/D] [drive:][path]
CD [..]

.. 指定變更到父系目錄。

鍵入 CD drive: 即可顯示指定磁碟機的目前工作目錄。
僅鍵入 CD 而不加參數,即可顯示目前的磁碟機和目錄。

使用 /D 指令參數可以同時變更工作磁碟機及其工作目錄。


如果您啟用擴充指令,CHDIR 的變更如下:

目前的目錄字串會被轉換成與磁碟上名稱相同大小寫的字串。所以如果磁碟
上的目錄是 C:\Temp 的話,CD C:\TEMP 命令實際上會轉換為 CD C:\Temp。

CHDIR 命令不會將空格當成分隔字元,所以如果您要切換到含有空格字元
的目錄時,就算您不使用引號來括住目錄名稱,也一樣可以用 CD 指令切
換到該目錄。例如:

cd \winnt\profiles\username\programs\start menu

就相等於:

cd "\winnt\profiles\username\programs\start menu"

如果您停用擴充指令,就必須輸入前一種指令。
===========================================================

D:\>chkdsk /?
檢查磁碟並顯示狀態報告。


CHKDSK [磁碟機[[路徑]檔名]]] [/F] [/V] [/R] [/X] [/i] [/C] [/L[:大小]]


volume 指定磁碟機代號 (後接冒號),連接點或磁碟區名稱。
filename 只能用在 FAT: 指定要進行分散程度檢查的檔案。
/F 修復磁片上的錯誤。
/V FAT/FAT32 模式: 顯示磁碟上每個檔案的完整路徑及名稱。
NTFS 模式: 如果有清除的訊息,也一併顯示。
/R 找出損壞的磁扇區並復原可讀取的資訊。(包含 /F)。
/L:size 只適用於 NTFS 模式: 將記錄檔大小變更為指定的 KB
數值。如果沒有指定記錄檔大小,就顯示目前的大小。
/X 如果必須的話,強制先解下磁碟區。所有在
磁碟區上開啟的控制代碼都會失效 (包含 /F)。
/I 只適用於 NTFS 模式: 不檢查索引項目。
/C 只適用於 NTFS 模式: 跳過資料夾結構的循環檢查。


使用 /I 或 /C 參數跳過某些磁碟區檢查,可以在執行Chkdsk 時減少檢查時間。
=========================================================
D:\>cls /?
清除螢幕。

CLS
=========================================================
D:\>cmd /?
啟動 Windows 2000 指令直譯器新例項

CMD [/A | /U] [/Q] [/D] [/E:ON | /E:OFF] [/F:ON | /F:OFF] [/V:ON | /V:OFF]
[[/S] [/C | /K] string]

/C 執行字串中所描述的指令然後結束指令視窗
/K 執行 字串中所描述的指令然後保留指令視窗
/S 修改字串在 /C 或 /K (參看下方)
/Q 關閉 echo
/D 從登錄中停用 AutoRun 指令(參看下方)
/A 將內部指令輸出結果以 ANSI 格式導向 pipe 或檔案
/U 將內部指令輸出結果以 Unicode 格式導向 pipe或檔案
/T:fg 設定幕前/幕後色彩 (參看 COLOR /?)
/E:ON 啟用指令延伸 (參看下方)
/E:OFF 停用指令延伸 (參看下方)
/F:ON 啟用檔案及目錄名稱完整字元(參看下方)
/F:OFF 停用檔案及目錄名稱完整字元(參看下方)
/V:ON 啟用延遲環境變數延伸,用 c 作為分隔字元。例如, /V:ON
可以讓 !var! 在執行時展開變數 var。文法 var 則會在輸入時
展開變數,這在 FOR 迴圈之中是完全不同的事。
/V:OFF 停用延遲環境變數展開

請注意用命令分隔字元 '&&&&' 隔開的多個命令
如果被引號包含時則會被當成字串來接受。此外,為了相容性的原因,/X
的作用與 /E:ON 相同; /Y 與 /E:OFF 相同且 /R 與/C 相同。其餘的參數
則會被忽略。

如果指定了/C 或 /K,則在參數後的其餘命令列會被當成命令列來處理,其
中使用下面的邏輯來處理引號字元 (") :

1. 如果所有下列條件都符合,那麼指令列上的引號會被保留:

- 沒有 /S 參數
- 正好有兩個引號
- 在兩個引號之間沒有下列
特殊字元: <>()@^|
- 兩個引號之間有一些空格
- 在兩個引號之間的字串是執行檔的檔案名稱。

2. 否則,如果第一個字元是引號,舊的指令行為會把前置字元去掉,並
將指令列中第一個引號及最後一個引號之間的所有文字便成保留文字。

(&<如果您在指令行中未指定 /D,當 CMD.EXE 起動後,它會尋找下列 REG_SZ/REG_EXPAND_SZ的 登錄變數。如果有一個存在或兩個都存在,
指令會執行第一個變數。

HKEY_LOCAL_MACHINE\Software\Microsoft\CommandProcessor\AutoRun

及/或

HKEY_CURRENT_USER\Software\Microsoft\CommandProcessor\AutoRun

將指令擴充功能預設成啟用狀態。您可以在特定的
呼叫中,用 /E:OFF 參數來停用擴充功能。
您可以啟用或停用一台電腦上或使用者登入工作階段中所有
CMD.EXE 呼叫的擴充功能,如果您要這樣作,
請使用 REGEDT32.EXE 來設定以下的 REG_DWORD 值:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\EnableExtensions

及/或

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\EnableExtensions

到 0x1 或 0x0。 使用者指定設定的執行優先權高於電腦上的設定。指令行
參數的執行優先權高於登錄中的設定值。


擴充指令包括下列指令的變更及(或)新增:

DEL or ERASE
COLOR
CD or CHDIR
MD or MKDIR
PROMPT
PUSHD
POPD
SET
SETLOCAL
ENDLOCAL
IF
FOR
CALL
SHIFT
GOTO
START (也包括援用外部指令之變更)
ASSOC
FTYPE

請鍵入 HELP 指令名稱,以查閱說明。

預設狀態下,不會啟用延遲環境變數擴充。您可以使用 /V:ON 或 /V:OFF
參數在執行 CMD.EXE 時啟用或停用完整檔案名稱。您也可以用
REGEDT32.EXE 來修改以下 REG_DWORD 值,來啟用或停用整個電腦上
或使用者登入工作階段中所有 CMD.EXE 的檔案名稱完整功能:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\DelayedExpansion

及/或

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\DelayedExpansion

其值可為 0x1 或 0x0。使用者登錄指定會比電腦設定
優先使用。而指令行參數又會比登錄設定值更優先使用。

如果已啟用延遲環境變數擴充,驚嘆號字元會在執行時
被用來取代環境變數值。

預設無法啟用檔案和目錄名稱完成。 您可以為特定的 CMD.EXE 呼叫,以
/F:ON 或 /F:OFF 開關啟用或停用檔案名稱完成。 您可以啟用或停用在同
一部電腦上所有 CMD.EXE 的呼叫完成及/或使用者登入工作階段。方法是使
用 REGEDT32.EXE 設定其一或兩者登錄中的 REG_DWORD 值:

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\CompletionChar
HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\PathCompletionChar

及/或

HKEY_CURRENT_USER\Software\Microsoft\Command Processor\CompletionChar
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\PathCompletionChar

用於特定功能的控制字元十六進位值 (例如 0x4 是 Ctrl-D ; 0x6 是
Ctrl-F)。使用者特定設定優先於電腦設定,指令行開關也優先於登錄設定。

如果以 /F:ON 開關啟用完成,則用於目錄名稱完成的控制字元是 Ctrl-D
而用於檔案名稱完成的控制字元是 Ctrl-F。如果您要停用在登錄中的特定
完成字元,請使用空間值 (0x20),因為它不是正確的控制字元。

當您鍵入其中一個控制字元後,完成功能會被啟動。如果路徑字串已存在,
而且所建立的路徑清單也符合的話,完成函數會讀取到指標所在左方為止
的路徑字串。然後它會顯示第一個符合的路徑。如果找不到符合的路徑,
它會發出嗶聲並保留顯示。如果您重覆按相同的控制字元,它將在符合的路
徑清單中循環執行。如果您同時按下 Shift 鍵與控制字元,可在清單中反
向移動。如果您進行編輯後再按控制字元的話,已儲存的符合路徑清單會被
丟棄,並建立新的清單。如果您在檔案及目錄完成功能之間切換,會有同樣
的情況發生。這兩個控制字元不同之處是:檔案完成字元可同時對應檔案及
目錄名稱,而目錄完成字元只能對應目錄名稱。如果您將檔案完成功能用在
內建目錄命令上 (CD,MD 或 RD) 也等於使用了目錄完成功能。

如果您在路徑字串兩端加上引號,完成功能鍵就可正確處理包含空格或其他
特殊字元的檔案名稱。還有,如果您備份後,又在指令行中呼叫完成功能的
話,已呼叫過完成功能的指標右方的文字會被丟棄。
===========================================================

D:\>comp /?
比較兩個檔案或兩組檔案的內容。

COMP [data1] [data2] [/D] [/A] [/L] [/N=number] [/C]

data1 指定第一個或第一組要比較的檔案的位置與檔名。
data2 指定第二個或第二組要比較的檔案的位置與檔名。
/D 以十進位格式來顯示不同之處。
/A 以 ASCII 字元來顯示不同之處。
/L 顯示不同之處的行號。
/N=number 只比較每個檔案中第一個指定的行號。
/C 比較檔案時忽略 ASCII 字母的大小寫。

要比較一組檔案,請在 data1 和 data2 參數中使用萬用字元。
===========================================================
D:\>copy /?
將一些檔案複製到另一個位置。

COPY [/V] [/N] [/Y | /-Y] [/Z] [/A | /B ] source [/A | /B]
[+ source [/A | /B] [+ ...]] [destination [/A | /B]]

source 指定要複製的檔案。
/A 指定一個 ASCII 文字檔案。
/B 指定一個二位元檔案。
destination 為新檔案指定目錄及(或) 檔案名稱。
/V 確認新檔案是否正確寫入。
/N 使用短檔名來複製非 8.3 名稱的檔案(如果可用的話)。
/Y 不顯示覆寫現存目的檔案的確認提示。
/-Y 顯示覆寫現存目的檔案的確認提示。
/Z 在可重新啟動模式中複製網路檔案。

參數 /Y 可以預先設定在 COPYCMD 環境變數中。
這可能會覆寫指令行中的 /-Y。 預設值是顯示覆寫確認提示,除非
COPY指令是從批次檔中執行。

如果要附加檔案,指定一個目的檔案,及數個
來源檔案 (使用萬用字元或 file1+file2+file3 格式)。
=========================================================
D:\>date /?
顯示或設定日期。

DATE [/T | date]

只鍵入 DATE 而不加上參數,可以顯示目前設定的日期,並且提示您輸入新
的日期。按 ENTER 鍵即可保持原來日期。

如果您啟用擴充指令,DATE 指令會支援 /T 參數,這個參數
會讓指令只輸出目前的日期,而不提示您輸入新日期。
===========================================================
D:\>del /?
刪除一個或更多檔案。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

names 指定一個或更多檔案或目錄清單。可以使用萬用字元
來刪除多個檔案。 如果指定目錄,這個目錄內的所有
檔案將被刪除。

/P 刪除每個檔案前,先提示確認。
/F 強制刪除唯讀檔案。
/S 由所有子目錄刪除指定的檔案。
/Q 安靜模式,不要問是否確定刪除全域萬用字元
/A 根據屬性選取要刪除的檔案
attributes R 唯讀檔案 S 系統檔案
H 隱藏檔案 A 準備保存的檔案
- 首碼表示不是

如果您啟用擴充指令,DEL 和 ERASE 指令的變更如下:

/S 參數的顯示方式完全相反,它只會顯示已刪除的檔案,不會顯示它找不
到的檔案。
============================================================
D:\>dir /?
顯示檔案清單以列出目錄中的檔案及子目錄。

DIR [drive:][path][filename] [/A[[:]attributes]] [/b] [/C] [/D] [/L] [/N]
[/O[[:]sortorder]] [/P] [/Q] [/S] [/T[[:]timefield]] [/W] [/X] [/4]

[drive:][path][filename]
指定要顯示的磁碟機、目錄或檔案。

/A 依照指定的檔案屬性來顯示檔案。
attributes D 目錄 R 唯讀檔
H 隱藏檔 A 保存檔
S 系統檔案 - 無意義
/B 使用單純格式 (沒有標頭資訊或摘要)。
/C 顯示檔案大小千位數分隔符號。這是預設值。
使用 /-C 來停用分隔符號的顯示。
/D 與寬的列表格式相同,但是依照欄來排序。
/L 使用小寫顯示。
/N 使用新的長列表格式,檔名會顯示在最右方。
/O 依照指定的排序順序來列出檔案。
sortorder N 依名稱 (英文字母) S 依大小 (最小的在前)
E 依副檔名 (英文字母) D 依照日期與時間 (日期較早的
在前)
G 先列出子目錄 - 表示相反的順序
/P 當資料填滿整個螢幕時暫停顯示。
/Q 顯示檔案擁有人。
/S 顯示指定目錄及所有子目錄中的檔案。
/T 指定用來顯示或排序的時間欄位
timefield C 建立
A 上次檔案存取時間
W 上次寫入檔案時間
/W 使用寬的列表格式。
/X 顯示對非 8.3 格式的檔案產生的短檔名。這個格式和 /N
相同,但是短檔名會插入在長檔名之前。 如果沒有長檔
名存在,該處會顯示空白。
/4 顯示四位數的年份

參數可能會在 DIRCMD 環境變數預先設定。您可以在任何參數使用連字號
字首(-)來覆蓋預先的設定--例如: /-W。
===========================================================

D:\>doskey /?
編輯指令列,叫回 Windows 2000 指令,及建立巨集。

DOSKEY [/REINSTALL][/LISTSIZE=size] [/MACROS[:ALL | :exename]]
[/HISTORY] [/INSERT | /OVERSTRIKE] [/EXENAME=exename]
[/MACROFILE=filename][macroname=[text]]

/REINSTALL 安裝另一份 Doskey。
/LISTSIZE=size 設定指令歷程緩衝區的大小。
/MACROS 顯示所有的 Doskey 巨集。
/MACROS:ALL 顯示所有執行檔中含有 Doskey 巨集的
Doskey 巨集。
/MACROS:exename 顯示指定的執行檔中的所有 Doskey 巨集。
/HISTORY 顯示存在記憶體中的所有指令。
/INSERT 指定您所鍵入的新文字插入在舊的文字中。
/OVERSTRIKE 指定您所鍵入的新文字覆蓋舊的文字。
/EXENAME=exename 指定執行檔。
/MACROFILE=filename 指定要安裝的巨集檔案。
macroname 為您建立的巨集指定名稱。
text 指定您要記錄的指令。

向上與向下鍵 叫回以前的指令; ESC 清除指令列;
F7 顯示指令歷程; ALT+F7 清除指令歷程; F8 尋找指令歷程;
F9 以號碼選擇指令; ALT+F10 清除巨集定義

以下是在 Doskey 巨集定義中的特殊碼:
$T 指令分隔字元。允許在一個巨集中使用多個指令。
$1-$9 批次檔參數。相當於批次檔中的 %1 到 %9。
$* 這個符號代表在指令行中巨集名稱後的所有文字。
============================================================
D:\>echo /?
顯示訊息,或切換指令回應的開啟狀態。

ECHO [ON | OFF]
ECHO [message]

僅鍵入 ECHO 而不加上參數,可以顯示目前的 ECHO 設定。

==========================================================
D:\>exit /?
結束 CMD.EXE 程式 (指令直譯器) 或目前的批次檔。

EXIT [/b] [exitCode]

/B 指定這個參數來結束目前批次檔而不是 CMD.EXE。
如果是由批次檔之外執行,CMD.EXE將會結束。

exitCode 指定一個數字。如果指定 /B,則設定 ERRORLEVEL為這個
數字。如果結束 CMD.EXE,設定程序結束碼為這個數字。
=========================================================
D:\>fc /?
比較兩個檔案或兩組檔案並且顯示其中的不同之處


FC [/A] [/C] [/L] [/LBn] [/N] [/T] [/u] [/W] [/nnnn] [drive1:][path1]filename1
[drive2:][path2]filename2
FC /B [drive1:][path1]filename1 [drive2:][path2]filename2

/A 針對每組不同之處只要顯示其中的第一行和最後一行。
/B 使用二進位的內容比較。
/C 忽略字母的大小寫。
/L 以 ASCII 文字檔案方式來比較檔案。
/LBn 在指定的行數中設定容許的最多連續的檔案不相符。
/N 在 ASCII 方式的比較中顯示行數。
/T 不要將定位字元展開為空格。
/U 以 UNICODE 文字檔案方式來比較檔案。
/W 將空白字元 (定位字元和空格) 壓縮後再進行比較。
/nnnn 指定在一處不相同之後必須相同的連續行數。
==========================================================
D:\>find /?
搜尋檔案中的文字字串。

FIND [/V] [/C] [/N] [/i] "string" [[drive:][path]filename[ ...]]

/V 顯示所有不包含指定字串的行。
/C 只顯示包含字串的行數。
/N 顯示每一行及它的行號。
/I 當搜尋字串時,忽略字元的大小寫。
"string" 指定要尋找的文字字串。
[drive:][path]filename
指定要尋找的檔案。

如果沒有指定路徑,FIND 會搜尋在提示字元中所輸入的文字
或者在其它的命令中搜尋。
============================================================
D:\>findstr /?
在檔案中搜尋字串。

FINDSTR [/b] [/E] [/L] [/R] [/S] [/i] [/X] [/V] [/N] [/M] [/O] [/P] [/F:file]
[/C:string] [/G:file] [strings] [[drive:][path]filename[ ...]]

/B 如果是在行的開端,則符合類型。
/E 如果是在行的尾端,則符合類型。
/L 逐字使用搜尋字串。
/R 使用搜尋字串為一般表示式。
/S 在現存目錄及所有的子目錄中搜尋符合的檔案。
/I 指定搜尋不區分大小寫。
/X 列印完全符合的行數。
/V 只列印不含相符字串的行數。
/N 列印每一行符合的行數前的行編號。
/M 只列印包含相符字串的檔案的檔案名稱。
/O 列印每一個相符行之前的字元位移。
/P 略過沒有可列印字元的檔案
/F:file 從指定的檔案讀取檔案清單 (/ 代表主控台)。
/C:string 使用特定的字串作為逐字搜尋的字串。
/G:file 從指定的檔案取得搜尋字串(/ 代表主控台)。
strings 要搜尋的文字。
[drive:][path]filename
指定要搜尋的一個或多個檔案。

除非引數的字首有 /C ,否則請以空格將多重搜尋字串分開。例如,
'FINDSTR "hello there" x.y' 將會在檔案 x.y 中搜尋 "hello",或"there"。
'FINDSTR /C:"hello there" x.y' 將會在檔案 x.y 中搜尋"hello there"。

有關 FINDSTR 一般表示式的資訊,請參閱連線指令參照。
==========================================================
D:\>format /?
格式化磁片以供 Windows 2000 使用。

FORMAT 磁碟機 [/FS:檔案-系統] [/V:標籤] [/Q] [/A:大小] [/C] [/X]
FORMAT 磁碟機 [/V:標籤] [/Q] [/F:大小]
FORMAT 磁碟機 [/V:標籤] [/Q] [/T:磁軌 /N:磁扇區]
FORMAT 磁碟機 [/V:標籤] [/Q] [/1] [/4]
FORMAT volume [/Q] [/1] [/4] [/8]

volume 指定磁碟機代號 (後接冒號),
連接點或磁碟區名稱。
/FS:filesystem 指定檔案系統的類型 (FAT、FAT32 或 NTFS)。
/V:label 指定磁碟區標記。
/Q 執行快速格式化。
/C 建立在新磁碟區上的檔案會自動壓縮。
/X 視需要先將磁碟區解下。
所有在磁碟區上開啟的控制碼都不再是正確的。
/A:size 覆寫預設的配置單位大小。建議在一般使用時,最
好使用預設設定。
NTFS 支援 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K。
FAT 支援 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K,
(128K, 256K 供磁碟區容量 > 512 位元組使用)。
FAT32 支援 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K,
(128K, 256K 供磁扇區容量 > 512 位元組使用)。

請注意 FAT 及 FAT32 檔案系統在磁碟區的叢集數目上
強制下列的限制:

FAT: 叢集數目 <= 65526
FAT32: 65526 < 叢集數目 < 268435446

如果格式化發現使用指定的叢集大小無法符合上面的要
求,格式化將會自動停止執行。

NTFS 壓縮不支援大小大於 4096 的配置單位。
/F:size 指定要格式化的軟碟大小 (160,
180, 320, 360, 640, 720, 1.2, 1.23, 1.44, 2.88, 或 20..
/T:tracks 為磁片各面指定磁軌數量。
/N:sectors 指定各條磁軌的磁碟區數量。
/1 格式化單面的軟式磁片。
/4 在高密度磁碟機內格式化 5.25 吋 360K軟式磁片。
/8 每條磁軌格式化八個磁碟區。
===========================================================
D:\>help /?
提供 Windows 2000 指令的說明訊息。

HELP [command]

command - 顯示該指令的說明訊息。
===========================================================

D:\>md /?
建立目錄。

MKDIR [drive:]path
MD [drive:]path

如果您啟用擴充指令,MKDIR 的變更如下:

必要時,MKDIR 會在目錄中建立一個中間目錄。
例如,假設 \a 不存在,則:

mkdir \a\b\c\d

相同於:

mkdir \a
chdir \a
mkdir b
chdir b
mkdir c
chdir c
mkdir d

如果擴充功能停用的話,您必須鍵入前一種指令類型。
=======================================================
D:\>mkdir /?
建立目錄。

MKDIR [drive:]path
MD [drive:]path

如果您啟用擴充指令,MKDIR 的變更如下:

必要時,MKDIR 會在目錄中建立一個中間目錄。
例如,假設 \a 不存在,則:

mkdir \a\b\c\d

相同於:

mkdir \a
chdir \a
mkdir b
chdir b
mkdir c
chdir c
mkdir d

如果擴充功能停用的話,您必須鍵入前一種指令類型。
===========================================================

D:\>more /?
以一次一頁螢幕的方式來顯示輸出。

MORE [/E [/C] [/P] [/S] [/Tn] [+n]] < [drive:][path]filename
command-name | MORE [/E [/C] [/P] [/S] [/Tn] [+n]]
MORE /E [/C] [/P] [/S] [/Tn] [+n] [files]

[drive:][path]filename 指定要顯示的檔案。檔案會以一次
一頁螢幕的方式顯示。

command-name 指定一個命令,而它的輸出將會以
一次一頁螢幕的方式顯示。

/E 啟用擴充功能。
/C 在顯示一頁之前先清除螢幕。
/P 展開 FormFeed 字元。
/S 將數個空白行顯示為一行。
/Tn 將定位字元展開為 n 個空白 (預設值為

MORE 環境變數中可以有指令選項

+n 在第 n 行開始顯示第一個檔案。

files 要顯示的檔案清單。在清單中的檔案用空格分開。

如果您使用了擴充功能,您可以在 -- 其它 --提示出現時,使用下列命令:

P n 顯示下面 n 行
S n 跳過下面 n 行
F 顯示下一個檔案
Q 結束
= 顯示行號
? 顯示輔助說明行
顯示下一頁
顯示下一行
========================================================
D:\>move /?
移動或更改檔案及目錄的名稱。

移動一個或一個以上的檔案:
MOVE [/Y | /-Y] [drive:][path]filename1[,...] destination

更改目錄名稱:
MOVE [/Y | /-Y] [drive:][path]dirname1 dirname2

[drive:][path]filename1 指定您要移動的檔案的位置與名稱。
destination 指定檔案的新位置。目的位置可以包含磁碟機字元
和冒號、目錄名稱、或是這些的組合。如果您只移
動一個檔案,您也可以包含檔名。這樣做會在移動
的同時更改檔名。
[drive:][path]dirname1 指定您要更改名稱的目錄。
dirname2 指定目錄的新名稱。

/Y 不要提示您是否要覆蓋一個現存的目的檔案。
/-Y 提示您是否要覆蓋一個現存的目的檔案。

參數 /Y 可能會在 COPYCMD 環境變數中預先設定。您可以在指令行中
使用 /-Y 來覆蓋預設值。預設值是除非 MOVE 命令是在批次檔中執行,
否則系統會提示您是否要覆寫現有檔案。
===========================================================
D:\>path /?
顯示或設定搜尋執行檔的路徑。

PATH [[drive:]path[;...][;%PATH%]
PATH ;

鍵入 PATH ; 即可清除所有搜尋路徑的設定,並將 cmd.exe 重導為只搜尋
目前的目錄。鍵入 PATH 且不指定任何參數,可顯示目前的搜尋路徑。
在設定的新路徑中加上 %PATH%,可以將舊路徑附加到新的設定。
===========================================================

D:\>rd /?
移除 (刪除) 一個目錄。

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

/S 除了目錄本身之外,一併移除指定目錄裡的所有目錄和檔案。
用於移除樹狀目錄結構。

/Q 安靜模式,有 /S 時,刪除目錄樹結構不再要求確認

============================================================
D:\>ren /?
更改檔案名稱。

RENAME [drive:][path]filename1 filename2.
REN [drive:][path]filename1 filename2.

請注意您不能為目的檔案指定新的磁碟機或路徑。
===========================================================

D:\>replace /?
取代檔案。

REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [/P] [/R] [/W]
REPLACE [drive1:][path1]filename [drive2:][path2] [/P] [/R] [/S] [/W] [/u]

[drive1:][path1]filename 指定來源檔案。
[drive2:][path2] 指定要取代的檔案的目錄。
/A 將新檔案加到目地目錄。不能和
/S 或 /U 參數同時使用。
/P 當取代檔案或新增來源檔案時顯示確
認的提示。
/R 取代唯讀與未受保護的檔案。
/S 取代在目的目錄中所有子目錄的檔案。不能
和 /A 參數同時使用。
/W 在開始前等待您放入磁片。
/U 只取代 (更新) 比來源檔案早
的檔案。不能和 /A 參數同時使用。
============================================================

D:\>time /?
顯示或設定系統時間。

TIME [/T | time]

僅鍵入 TIME 而不加上參數,可以顯示目前設定的時間,並且提示您輸入
新的時間。按 ENTER 鍵即可保持原來時間。

如果您啟用擴充指令,TIME 指令將會支援/T 參數,這個參數
會讓指令只輸出目前的時間,而不提示您輸入新時間。
==============================================================
D:\>tree /?
以圖形顯示磁碟機或路徑的資料夾架構。

TREE [drive:][path] [/F] [/A]

/F 顯示各資料夾中檔案的名稱。
/A 使用 ASCII 取代延伸字元。
============================================================
D:\>type /?
顯示文字檔案的內容。

TYPE [drive:][path]filename
============================================================
D:\>ver /?
顯示 Windows 2000 版本。

VER
============================================================
D:\>vol /?
顯示磁碟區標籤和序號 (若有的話)。

VOL [drive:]
=============================================================
D:\>xcopy /?
複製檔案和樹狀目錄。

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/i] [/Q] [/F] [/L] [/H] [/R] [/T] [/u]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]\r\n
[/EXCLUDE:file1[+file2][+file3]...]

source 指定要複製的檔案。
destination 指定位置或者/以及新檔案的名稱。
/A 只複製設定成保存屬性的檔案,不要改變屬性的設定。
/M 只複製設定成保存屬性的檔案,並清除保存屬性。
/D:m-d-y 複製在指定日期當天或之後發生變更的檔案。如果沒有給日
期,只複製那些來源檔案日期比目的檔案日期為新的檔案。
/EXCLUDE:file1[+file2][+file3]...
指定檔案清單字串。如果有字串對應到要進行複製的檔案
絕對路徑的任何部分,這個檔案會被排除複製。例如,指定
字串\obj\ 或 .obj 的話,會排除所有在 obj 目錄下副檔名是
.obj 的檔案複製。
/P 在建立每個目的檔案時顯示提示。
/S 複製每個目錄及其包含的子目錄,不複製空目錄。
/E 複製每個目錄及其包含的子目錄,也複製空目錄。/S 與 /E
相同,能夠用來修改 /T。
/V 驗證每個新檔案。
/W 在複製之前提示您按鍵繼續。
/C 如果錯誤發生時也繼續複製。
/I 如果目的不存在且複製一個以上的檔案的話,就假設指定的
目的一定是目錄。
/Q 在複製時不要顯示檔名。
/F 在複製時顯示來源及目的檔案的全部檔名。
/L 顯示要複製的檔案。
/H 時複製隱藏檔和系統檔。
/R 覆蓋唯讀檔案。
/T 建立目錄結構,但不複製其中的檔案。不包括空目錄及子目
錄。/T /E 會包括空目錄及子目錄。
/U 只複製已經存在目的位置的檔案。
/K 複製檔案屬性。通常 Xcopy 會重設唯讀的屬性。
/N 用所產生的短檔名來進行複製。
/O 複製檔案所有權及 ACL 資訊。
/X 複製檔案審查設定 (包含 /O)。
/Y 不要提示您確認是否要覆蓋一個已經存在的檔案。
/-Y 示您確認是否要覆蓋一個已經存在的檔案。
/Z 在可重新開始的模式中複製網路檔案。

參數 /Y 可以在 COPYCMD 環境變數中預先設定。但可以在指令行中用
/-Y 參數來覆蓋原有設定。


參考資料:
•DOS指令•
cmd.exe 指令 共有哪些?

2009年10月28日 星期三

關於XP暫存檔的位置

現在的安裝檔大部分設定成必需要連上網路,下載最新的安裝檔案!

所以,必需要常常重新下載,非常的麻煩!

一般預設的路徑是在
"C:\Documents and Settings\使用者名稱\Local Settings\Temporary Internet Files"
可以直接把它拉到桌面上,到時候在瀏覽網頁的時候,可以在裡面找你剛剛下載下來的暫存檔,非常好用!

而Windows更新的暫存檔是放在
C:\WUTEMP(Windows Update V4)
C:\WINDOWS\SoftwareDistribution\Download(Windows Update V5 或 V6)

參考資料:
關於 XP 暫存檔的位置
[WinXP] 微軟的自動更新(暫存檔)是在哪裡

2009年10月27日 星期二

無法設定檔案關聯

今天在公司早上一直在設定portable的軟體設定。為什麼?
因為,之前在linux使用vim的時候,會使用外部軟體來分析我目前開啟的檔案,非常的方便!

但是,在windows上一直沒有很方便的軟體,可以讓我來分析我目前開啟的文字檔案。
但是,在不久之前,我發現到有一堆GnuWin32,安裝完之後,可以在windows上安裝許多linux下才能跑,而且非常有用的指令,例如是grep, awk...一堆非常好用的分析軟體。

喔耶,這個時候,我就可以透過這一些分析軟體來分析我目前開啟的文字檔案。
我在我的電腦,把portable安裝在D槽下,而且,真的可以使用外部的程式來分析我的vim使用的文字檔內容,非常的痛快!

但是,我在公司的電腦,確一直出現,無法存取某一個暫存檔的錯誤,耶!百思不得其解,喔耶,在今天突然靈機一動,會不會在我的路徑中,有出現空白哩?因為,我在公司的這一台的暫時的電腦,只有C槽,所以,我把大部分的檔案放在桌面上(當然是有分類啦),而桌面就是在Documents and Settings的資料夾下面,所以會出現這一個問題,因為在指令的模式下,通常會用空白當作分隔指令與動作的標準(例:gcc -c main.cpp -o main),因此,必需把portable的應用程式放在沒有空白的路徑下就可以了!

結果,在解決這一個問題之後,又出現另一個問題了,就是我沒有辦法把.c與.h關聯到gVimPortable.exe,也就是說,我希望可以連點兩下時,可以直接透過gVimPortable.exe來開啟.c與.h,但是,我把gVimPortable.exe的檔名改成其它的檔名之後,又可以?!這個時候就要透過我的猜測力啦~耶~這讓我想到之前的一個經驗,當一張網卡設定好一個ip之後,你把它拔掉,換上另一張網卡,設定同一個ip時,系統會跟你說,系統已經有設定這一個ip了!會不會是?!因為在關連檔案中,不可以有相同的檔名。

因此,我就到regedit(直接在command列表中,打入regedit)的列表中,把路徑為HKEY_CLASSES_ROOT\Applications\VimPortable.exe\的這一個目錄全部刪掉,再到.c或.h的檔案重新關聯就好了。

嗯,這一個經驗很重要,我想有部分使用portable應用程式的人會使用到,特此記錄!

2009年10月25日 星期日

在windows下使用gvim + ctags去trace code

公司原本是使用source insight去trace code,真的!我不得不說,source insight的功能實在是超強大的!

但是,不知道是source insight之前公司沒有使用過,還是使用期限到了,現在有在詢問是否有使用source insight的需求!

無所謂,因為,open source的努力,有很多東西都可以達到source insight的功能。所以,就研究一下如何使用gvim+ctags來完成trace code的功能。

首先去下載 Ctags for win32 版本,解壓縮後把ctags.exe放在Path的路徑中。但是,要注意的是,在路徑中不可以空白存在。

接下來將 Taglist 的 Plugin 放置到gvim的plugin資料夾內。

把游標移動到使用的函式中,同時按「Ctrl」與「]」,會跳到定義此函式的地方;相反的跳過去之後,同時按「Ctrl」與「t」會跳回原來的地方

Ctrl+w可以在視窗之間作切換

透過*.vim,就可以支援一個視窗開啟多個檔案,而按Shift+Tab就可以在多個檔案中切換。

設定 F12 為開啟/關閉 Tag List 的快捷鍵:
在vimrc檔案中,加入以下內容
nnoremap <F12> :TlistToggle<CR>

:tags
可以顯示你經過的標籤列表

按一次Ctrl+w再加上方向鍵,可以在不同的分割視窗中移動

要替一整個目錄製作Tag,請在project的根目錄下使用以下這一個指令
ctags -R

參考資料:
Setting Up Ctags + Gvim in Windows
vim 常用插件 ctag && TagLlist
vim-hacks
Make vim more powerful

2009年10月24日 星期六

BIOS - PCI篇

在PCI Device有幾種定址方式Memory AddressI/O Address SpacesConfiguration Address Space

而在Configuration Space會有Configuration Space Header的格式,會有幾個基本的ID: Device IDVendor IDSubsystem IDSubsystem Vendor ID

而大部分的PCI的這四個ID都一定要填,除了,PCI Spec 3.0的Subsystem Vendor ID and Subsystem ID的這一個小節所提到的,「Implementation of these registers is required for all PCI devices except those that have a base class 6 with sub class 0-4 (0, 1, 2, 3, 4), or a base class 8 with sub class 0-3 (0, 1, 2, 3).」

除了base class為6且sub class為0-4或base class為8時且sub class為0-3,這一些的Subsystem ID與Subsystem Vendor ID可以不填之外,其它都要填!

而這個時候,要了解到base class與sub class的儲存的位置在哪裡?它就位於Configuration Space Header的Offset 09h起連續3個DWORD就是Class Code,而由低到高分別三個DWORD是「The upper byte (at offset 0Bh) is a base class code」「The middle byte (at offset 0Ah) is a sub-class code」「The lower byte (at offset 09h) identifies a specific register-level programming interface
另外一提的是,在PCI的最基本單位為1 DWORD = 2 bytes

而這一次出的作業就是把需要填Subsystem ID與Subsystem Vendor ID的所有PCI的七個資料列出來分別是Four ID:「Device ID」「Vendor ID」「Subsystem ID」「Subsystem Vendor ID」與Three number:「Bus number」「Device number」「Function number

[2010.04.13 補充]


要如何存取PCI哩~
有兩個存取方式
1. 透過Index I/O
2. 透過Memory Access

在0x40-0x255之後的位址,就是給PCI Device使用的區塊~所以,我們PCI spec也沒有辦法知道是如何使用那一些區域

參考資料:
封存檔:作業系統的 PCI ID 使用規格書
pci driver
在 PCI 匯流排列舉期間停止似乎 CEPC 乙太網路開機載入器
Class Code Table
PCI_LIB 3.0
UEFI 2_3
關於PCI的probing