轉貼DOS講義 |
|
jackkcg
站務副站長 發表:891 回覆:1050 積分:848 註冊:2002-03-23 發送簡訊給我 |
轉貼DOS講義
http://hp730.tx.ntust.edu.tw/~myang/cp/dos.html -------------------------------------------------------------------------------- 一、前言
任何PC均是靠硬體及軟體之配合,才能發揮功能。軟體中不可缺少的是作業系統 -- OS (Operating System)。程式之執行,檔案之管理,磁碟之運作,均是透過 OS。目前個人電腦的 OS 有六大主流: UNIX、Mac-OS、Windows 95、Windows NT、IBM OS/2 及 DOS。其中 DOS (Disk Operating System) 為 IBM 及其相容個人電腦之作業系統。雖然現在 Windows 大行其道,但仍然有許多機關行號依舊使用 DOS 作為PC的作業系統,因此掌握DOS 的基本知識,仍有其必要性。 目前通用的 DOS 有多種產品,如:Novell NDOS、IBM PC-DOS等,而其中最通行者為Microsoft 的 MS-DOS。在Win 95下的版本是 7.0,在Win 98下則直接標明為Windows 98,不過仍有部分機器依然使用 3.3 版,而獨立發行的最後一版是 6.22 版。本講義乃根據 7.0 版編成。 DOS 指令依照其功能,可分為以下五方面: 檔案管理 (filles)
目錄管理 (directories)
磁碟管理 (disks)
公用程式 (utillities)
其他指令 二、指令基本常識
基本形式:[command] [parameters] /[switches]
通配字元 (wildcard): ? (代表單一字元) * (代表多個字元)
轉向 (redirection) 字元:< (輸入) > (輸出) >> (附加) | (傳遞)
*. 將原本應從鍵盤輸入、或輸出到螢幕之資料,改從/到指定的檔案、指令、或週邊。
內部指令-為DOS核心程式之一部分,不必從磁碟載入。如下: cd, chcp, cls, copy, ctty, date, del, dir, exit, lh, md, path, prompt, ren, rd, set, time, type, ver, verify, vol
外部指令-必須從磁碟載入之DOS指令。如下:append, assign, attrib, backup, chcp, ckdsk, command, comp, debug, defrag, deltree, diskcomp, diskcopy, doskey, edit, emm386, exe2bin, exit, expand, fasthelp, fastopen, fc, fdisk, find, format, graftabl, graphics, help, interlnk, intersvr, join, keyb, label, lh, loadfix, mem, memmaker, mirror, mode, more, move, msav, msbackup, mscdex, msd, nlsfunc, print, qbasic, recover, replace, restore, scandisk, setver, share, smartdrv, sort, subst, sys, tree, undelete, unformat, vsafe, xcopy
※在Win 98下,DOS外部指令存放於c:/windows/command之目錄下。
三、檔案管理
檔案命名-分為兩部分,前為檔名,至多 8 字,中隔一句點,其後 3 字為副名 (extension)。
檔名-可用的字元:A~Z (大小寫不拘), 0~9, _, ^, $, ~, !, #, %, &, -, {, }, (, ), ', `
禁用名稱- clock$, con, aux, com1~4, lpt1~3, nul, prn
中文檔名-自求多福,某些字會衝到。另外,DOS 會將小寫變大寫,因而使中文變碼。
副名-用以標示檔案之類別。DOS對下列名稱有特定作用:EXE, COM, SYS, BAT
檔案類型
應用程式檔-帶有副名 EXE, COM 之檔,經載入後可進行特定功能,例如 attrib.exe, edit.exe。
專屬資料檔-內含有供某一應用程式使用之資料,通常有特定副名,例如 123.ovl, abc.wk1 (lotus 123), he.hlp (he) 等。
文字檔-內容僅含有文字內碼 (ASCII, Big-5),無控制碼或機器碼。
系統檔-帶有副名 SYS 之檔,內容為硬體之資料,又稱為驅動程式 (device driver)。
批次檔-帶有副名 BAT 之文字檔,內容為 DOS 指令組成,載入後自動執行這些指令。
檔案基本資料-用指令 dir 可顯示檔案之基本資料:大小、日期、時間
Switches : /b (by line) /l (lower case) /p (pause) /s (subdirectory) /w (wide) /a (attribute): h (hidden) s (system) d (directory) a (archive) r (read-only) /o (order): d (date) e (extension) g (group) n (name) s (size)
檔案內容顯示-用指令 type abc.txt 可顯示其內容。若內容甚大,則
用type abc.txt | more 可一次顯示一頁後暫停。
複製檔案-用指令copy
單一:copy a:abc.fil b:
一組:copy a:*.fil b:
更名:copy a:abc.fil b:def.fil
接合:copy abc.fil def.fil gh.fil
由鍵盤輸入建檔:copy con abc.txt
輸出到印表機:copy abc.txt lpt1
*. switches: /a (ASCII) /b (binary) /v (verify)
檔案改名-用指令 ren oldname.fil newname.fil;ren *.tmp *.txt
搬移檔案-用指令 move /oldpath/filename.fil /newspath
*. move 也有改名的功能,但它是外部指令,不若 ren 方便。
列印檔案-用指令 print abc.txt (Win98下無)
刪除檔案-用指令 del abc.txt;del abc.*;del a:.
復原被刪除檔案-用指令 undelete abc.txt;undelete abc.*;undelete /all (Win98下無)
比較檔案內容-用指令 fc abc.txt def.txt > result.txt
檔案屬性-用指令 attrib ( /-)[a|h|r|s] [filename] [/s]
屬性:a (archive): backup, restore, xcopy 指令用來選取須要之檔案
h (hidden):檔案為隱藏檔,用 dir 無法顯示
r (read-only):檔案為唯讀檔,無法更改內容
s (system):檔案為系統檔 顯示:attrib abc.fil;attrib c:
更改:attrib r abc.dat
四、目錄管理
概論:
目的-為便於管理檔案,將磁碟予以區分為若干目錄 (directory),再將檔案依照其關連性,分別置於相關之目錄下。目錄下亦可有子目錄 (subdirectory)。
樹狀結構-目錄之間的關係可視為呈樹枝狀。最基本的目錄稱為根目錄 (root directory),其名稱用 \ 表之,例如 c:\。
*. 根目錄之最大檔案數:224 (1.2mb, 1.44mb), 512 (Hard Disk)
目錄名稱-最多 8 字元,可帶有副名。
目錄路徑-檔案所在的目錄結構,例如 c:\windows\system\
顯示路徑的提示-用指令 prompt:
prompt $p → c:\dos
prompt $p$g → c:\dos>
顯示樹狀結構-用指令 tree c:\windows (Win98下無)
switch: /f (filename) 顯示目錄及檔名
tree c:\ /f |more 跳頁顯示
建立新目錄-用指令 md newdir
更換目錄-用指令 cd c:\nextdir
cd .. 回到上一層目錄
cd \ 回到根目錄
刪除目錄-用指令 rd c:\emptydir *. 只有空目錄才能刪除。
*. 用指令:deltree c:\fulldir *. 連子目錄一起清除
複製目錄-用指令 xcopy c:\mydir a:\yourdir 連同子目錄及檔案一起複製。
switches: /a (archive) /d (date) /e (subdirectory)
/m (modify archive) /s (subdirectory-nonempty) /v (verify) /w (wait)
更新目錄-用指令 replace c:\mydir /u (Win98下無)
switches: /a (add) /p (prompt) /r (read-only)
/s (subdirectory) /w (wait) /u (update)
設定可執行檔之搜尋路徑-用指令 path c:\;c:\dos;c:\windows;
設定資料檔之搜尋路徑-用指令 append c:\;c:\dos;c:\windows; (Win98下無)
switches: /e (environment) /x (execute)
若僅用 append,而無隨後之引數,則顯示已設定之路徑。
若要取消,則用 append ;
目錄更名-用指令 ren \olddir \newdir 或 move \olddir \newdir
五、磁碟管理
概論-磁碟必須經過格式化 (format),才能夠儲存資料。磁碟之管理主要即為資料在磁碟上之存取及維護。
格式化磁碟-用指令 format a:
*. switches: /1 (single side) /4 (dsdd floppy)
/8 (8-sector) /f (floppy format) /q (delete old FAT)
/s (system) /u (unconditional) /v (volume label)
取消格式化磁碟-用指令 unformat a: (Win98下無)
檢查磁碟-
chkdsk a:
*. switches: /f (fix error) /v (verify file)
scandisk c:
*. 係圖形介面型之指令
*. switches: /all /autofix /checkonly /custom /mono /nosave /nosummary /surface
轉移作業系統程式到磁碟-用指令 sys c:
*. MS-DOS 系統程式有三:IO.SYS, MSDOS.SYS, COMMAND.COM,而前二者不能用 copy 轉移。
標示磁碟-用指令 label a:mydisk 1
*. 磁碟之標示最多 11 字。
複製軟碟-用指令 diskcopy a: b:
*. switches: /1 (1st side) /v (verify)
比較軟碟內容-用指令 diskcomp a: b: (Win98下無)
*. switches: /1 (1st side) /8 (8-track)
磁碟備份-用指令 backup c:\work a: (Win98下無)
*. switches: /a (add) /d (date) /f (format) /l (log)
/m (modify archive) /s (subdirectory) /t (time)
*. 可備份單一目錄、及其子目錄、特定檔案、或附加新檔到備份磁碟。
從備份復原磁碟-用指令 restore a: c:\work\*.txt (Win98下無)
*. switches: /a (after date) /b (before date) /d (display) /e (earlier than)
/l (later than) /m (modified files) /n (nonexist) /p (prompt) /s (subdirectory)
從損壞磁碟救回檔案-用指令 recover a:mybad.fil (Win98下無)
分割硬碟-用指令 fdisk
*. 進行格式化硬碟前,應先執行 fdisk,設定硬碟之主分割 (primary partition)。
六、公用程式
文書處理
*. EDIT:具有圖形界面之全畫面文書編輯程式。功能甚佳,但與中文稍有衝到。
高階程式語言-QBASIC:為 QuickBASIC 解譯程式。(Win98下無)
程式偵錯-DEBUG:用於組合語言程式之編寫、偵錯。初學者勿用。
防毒-
掃瞄磁碟上之病毒:msav(Win98下無)
監視病毒:vsafe(Win98下無)
DOS 指令解說-help(Win98下無)
*. 係圖形介面型之指令
七、其他指令
清除螢幕-cls
濾過型指令:與轉向字元配合使用,將送來的資料予以分割、重整、或摘取。
more:分頁顯示資料-例如 type c:\netlog.txt | more
find:檔案中搜尋文句-例如 find "ABCdef" abc.txt > result.txt
sort:將送來之資料排序(由小到大)-例如 sort < list.txt > newlist.txt
記憶體運用-
mem:顯示主機記憶體之使用情形。
*. switches: /c (classify) /d (debug) /p (program)
lh (Win98下無):將程式載入高位址記憶區 (UMB, Upper_Memory_Block)-例如 lh doskey
*. 在 config.sys 檔內須包括 dos=umb 方能使用此指令。
設定變數-set
顯示已設定之變數:set
設定變數:set my name=M. C. Yang
清除變數:set my name=
替身-(如非必要,請勿濫用替身)
subst:用字母充當子目錄的替身-例如 subst d: c:\dos
*. 若僅用 subst,而無隨後之引數,則顯示已設定之替身及正身。
*. 若要取消,則用 /d-例如 subst d: /d
join:用子目錄充當磁碟的替身-例如 join a: c:\driveA (Win98下無)
*. 若僅用 join,而無隨後之引數,則顯示已設定之替身及正身。
*. 若要取消,則用 /d-例如 join a: /d
八、批次檔
批次檔次級指令 (subcommand)
@ 抑制指令之顯示
*. 必須置於指令之前-例如 @echo off
call 執行另一批次檔,而後回到原檔之下一指令
choice 從鍵盤讀取選擇項,所得之選項置於 errorlevel
echo 顯示訊息到螢幕上-例如 echo this is a message
*. echo on/off 開始/停止顯示指令
*. echo 顯示目前 echo 之狀態 (on or off)
*. echo. 顯示一空行
for..in..do.. 對一檔案群或目錄群執行一指令
*. 例如 for %%a in (*.txt) do type %%a
for 所用之變數必須為 %%a ~ %%z (不管大小寫)
goto 跳到檔內之指定位置,並開始執行之
if 根據給予條件執行指令
*. exist 測試檔案是否存在-例如 if exist a.txt type a.txt
*. errorlevel 為前一程式傳回之代碼-例如 if errorlevel 1 goto one
*. == 測試是否相等-例如 if %file name%==test.bat echo ok
二 % 之間為系統變數,如例中之 file name 即是
*. not 否定測試結果-例如 if not exist a.txt goto end
pause 暫停,等待輸入
rem 註解
shift 移動置換參數 (%0 ← %1)
*. %0 ~ %9 為批次檔之引數-例如 c:\>test a b c 中:
%0 =test; %1=a; %2=b; %3=c
基本-
命名:與一般檔案相同,而副名須為 .BAT。必需避免與可執行檔同名。
使用:在系統提示 (system prompt) 時,鍵入檔名即可執行。
中斷執行:按 ^C 或 ^[BREAK]。若要暫停,則按 ^S 或 [PAUSE]。
AUTOEXEC.BAT
MS-DOS 之開機自動執行檔,通常設定搜尋路徑、系統提示,以及個別機器之作業環境(如:滑鼠、中文),或載入一些常駐程式 (TSR),例如防毒軟體等。
九、CONFIG.SYS
(這些功能在Win98下已無作用)
功能-在執行 AUTOEXEC.BAT 之前的 DOS 系統設定檔。用以載入週邊驅動程式、規劃記憶體 RAM 之使用空間。
專用指令 break 偵測 ^C 或 ^[BREAK] 之功能的開關
buffers 設定 DOS 與磁碟交換資訊之緩衝記憶體大小。
country 設定系統所使用的國別語言。
device 載入週邊驅動程式
devicehigh 載入週邊驅動程式到 UMB
dos 設定 DOS 所使用的記憶體位置
drivparm 設定磁碟的特性
fcbs 設定 DOS 可同時使用的檔案控制區塊 (FCB) 數目
files 設定 DOS 可同時開啟的檔案數目
include 引用其他區塊之指令
install 執行常駐程式
lastdrive 設定有效磁碟代號之數目
menucolor 設定文字及背景的顏色
menudefault 設定預設選項及等待時間
menuitem 定義選項名稱及提示句
numlock 設定 [NUM LOCK] 鍵之開機狀態
rem 註解
set 設定環境變數
shell 設定指令解譯程式名稱
stacks 設定 DOS 保留給處理硬體中斷之記憶體大小
submenu 類似 menuitem,但為多層次選項名稱
switches 在擴充式鍵盤上模擬傳統式鍵盤之使用法 中斷 config.sys 執行 [F5], [Shift] 結束 config.sys 執行。
[F8] 逐步確認 config.sys 之執行。 十、功能鍵
暫存區內容編輯
在 DOS 指令列之提示時,前次鍵入之指令,會保留在一暫存區 (template)。暫存區內容可用鍵盤上之功能鍵編輯,以減少指令之重複輸入。 [F1]、[→] 向右移動一個字元
[F2] 字元 顯示內容,直到該字元
[F3] 顯示其餘未顯示之字元
[F4] 字元 清除剩餘內容,直到該字元
[F5] 清除暫存內容,代之以鍵入字元
[F6] ^Z
[F7] ^@
[←]、[BS] 向左移動一個字元
[INS] 插入模式之開關
[DEL] 刪除字元
[ESC] 取消編輯 其他功能鍵 [NumLock] 數字鍵盤與功能鍵之切換
[CapsLock] 設定鍵入字母為大寫
[Shift]-[PrtScn] 將螢幕內容送至印表機
^P、^[PrtScr] 將鍵入字元同時送到螢幕及印表機
^S、[Pause] 暫停顯示
^C、^[Break] 中止顯示或中止執行
[Alt] 與數字鍵盤結合,以產生任何 ASCII 字元 十一、多重開機設定
(在Win98下無作用)
Config.sys 檔
從 6.0 版起,DOS 在開機時可以用不同的設定。其關鍵在於 config.sys 可以模組化。每一個模組稱為「組態區塊」 (configuration block)。
組態區塊的結構:由「區塊標題」 (block header) 帶頭的一段文字,其內容為 config.sys 指令。所謂區塊標題,乃是用方括號所括起的名稱。
一個多重開機型的 config.sys 檔,其第一個模組為 [menu],用以敘述此檔的各個開機模式。下面為一例: [menu]
menuitem=normal, Normal Start Configuration
menuitem=test, For testing
menucolor=15,1
menudefault=normal,5 [common]
device=c:\dos\himem.sys
dos=high
buffers=40
files=40 [normal]
device=c:\dos\emm386.exe x=c000-c800 noems
set path=c:\dos;c:\windows; [test]
device=c:\dos\emm386.exe 2048 x=c000-c800
set path=c:\windows; [common] 上例中,menuitem 之後為組態名稱及其提示,menucolor 後為前景 (15, 白) 及背景 (1, 藍) 的顏色,menudefault 指定開機預設組態 (normal) 及等待時間 (5 sec)。
[common] 模組為共通設定,不必寫在 [menu] 模組內。而最後之 [common] 則是為了給未來其他軟體修改 config.sys 用。
Autoexec.bat
經由多重開機所得的系統,其環境參數 config 為其開機組態名稱。
利用此參數,並用語法 goto %config%,可以從而控制 autoexec.bat 的執行步驟。下面為一例。 @echo off
prompt $p$g
goto %config% :normal
smartdrv
win
goto end :test
et3
goto end :end
------
********************************************************** 哈哈&兵燹 最會的2大絕招 這個不會與那個也不會 哈哈哈 粉好 Delphi K.Top的K.Top分兩個字解釋Top代表尖端的意思,希望本討論區能提供Delphi的尖端新知 K.表Knowlege 知識,就是本站的標語:Open our mind |
ddy
站務副站長 發表:262 回覆:2105 積分:1169 註冊:2002-07-13 發送簡訊給我 |
|
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
Hi,jackkcg 您好:
看過這篇文章後,想請教您我遇過的一個問題,
請問 DOS 的批次檔中有沒有類似 On Error resume next
這種指令?
我之前是想做能自動偵測光碟機位置的批次檔,
指令碼像這樣: if exist d:\Backup.gho goto goodD
:good的D
執行 ghost 的還原動作 if exist e:\Backup.gho goto goodE
:goodE
執行 ghost 的還原動作
rem 一直檢查到有 Backup.gho 的光碟片為止
但是若 d 槽是光碟機且裡面沒有光碟片的話,就會顯示
錯誤訊息並跳出批次檔。我有試過 on errorlevel 0 goto
但雖然光碟機中沒有光碟是傳回 errorlevel 0 的訊息,
但 goto 指令卻不會動作而跳出批次檔。找了蠻久都找不
到解答,想請教您,謝謝。
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: Hi,jackkcg 您好: 看過這篇文章後,想請教您我遇過的一個問題, 請問 DOS 的批次檔中有沒有類似 On Error resume next 這種指令? 我之前是想做能自動偵測光碟機位置的批次檔, 指令碼像這樣:這類的問題,可以自行寫一個程式,例如: CheckFLE.exe D:\Backup.gho 的程式,此程式會有 return 值,即您主程式的回傳值,如:if exist d:\Backup.gho goto goodD :goodD 執行 ghost 的還原動作 if exist e:\Backup.gho goto goodE :goodE 執行 ghost 的還原動作 rem 一直檢查到有 Backup.gho 的光碟片為止但是若 d 槽是光碟機且裡面沒有光碟片的話,就會顯示 錯誤訊息並跳出批次檔。我有試過 on errorlevel 0 goto 但雖然光碟機中沒有光碟是傳回 errorlevel 0 的訊息, 但 goto 指令卻不會動作而跳出批次檔。找了蠻久都找不 到解答,想請教您,謝謝。 int main(int argc,char **argv) { // 判斷 argv[1] 的檔案是否存在 // 存在傳一個值,不存在回另一個值 return 100; }這樣 errorlevel 就是 100 囉。 像是一些 DOS 批次檔選單也都可以用同樣的方式作,例如,在我網頁中的 BatMenu 就是一個批次檔選單工具。 可由我網頁左上選單中選「我寫的軟體」中找到 BatMenu 的下載連結(因為 Kimo 無法由別的網頁連到,要的請自行去下載吧) 另外,對於您的需求,我常用的方法是自定開機光碟的磁碟機代號,例如: ■ CONFIG.SYS DOS=HIGH,UMB DEVICE=HIMEM.SYS DEVICE=EMM386.EXE D=128 RAM DEVICEHIGH=ECSCDIDE.SYS /D:MSCD001 ■ AUTOEXEC.BAT MSCDEX.EXE /D:MSCD001 /L:L 如此,光碟機就是 L: 不必去管有多少硬碟機及邏輯分割。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/10/15 22:52:23
------
http://www.ViewMove.com |
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
|
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
引言: Hi, dllee 您好: 感謝您熱心解答我的問題,請問您所說的程式,指的是 c++ 嗎? 說實在的,我沒有寫過 DOS 下的程式,也不懂 DOS 底層的東西如 INT 等…不過把光碟機強制設成 L 真是個好主意;我是比較貪心一點,因 為上次試的時候,有兩台光碟機,而我不巧放在第二台,就停住了。程式... 因為我只會 C/C++ ,其他的程式應該也是可以,當然, 您要在 DOS 下使用當然得作出 DOS 下可以用的執行檔囉。 像這類的程式用不到 INT 之類的東東,不必擔心 <>< face="Verdana, Arial, Helvetica">引言: 還有,我上您的網站,沒有 「我寫的軟體」 這個選單啊… 有圖為証 我連結都點進去看過,不過那個移動式選單會把左邊的文字連結遮住, 看不到… 還是謝謝您幫我解惑。 您上錯了,我的兩個網址內容可是不同的喔,請到 http://dllee.ktop.com.tw 去看看,點選那個像檔案夾的圖示,就會出現選單,再按一下就關閉選單。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell....
------
http://www.ViewMove.com |
azurecloud
中階會員 發表:52 回覆:108 積分:92 註冊:2003-09-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |