跳轉到內容

MS-DOS 7 系統程式設計入門/實用程式選輯

75% developed
來自 Wikibooks,開放世界中的開放書籍

第 6 章. MS-DOS 7 的實用程式選輯

MS-DOS 7 中命令直譯器的功能由單獨的可執行檔案(實用程式)補充和擴充套件。Windows-95/98 作業系統版本中提供了一些 DOS 實用程式。如果本章中沒有明確說明實用程式的來源,則表示它是這些 Microsoft 實用程式之一,通常可以在 \Windows\Command 目錄中找到。除了這些之外,許多其他實用程式也可以在 MS-DOS 7 中成功使用,包括來自早期 DOS 版本的實用程式以及各種私人和非私人軟體供應商編寫的實用程式。

MS-DOS 實用程式包含內部幫助文字。當從命令列使用單個“/?”引數啟動實用程式時,可以顯示該幫助文字。很少遇到其他實用程式,它們在使用“–h”引數或根本不帶引數啟動時顯示幫助文字。

某些 MS-DOS 實用程式會請求 DOS 版本號,如果 DOS 返回的版本號與預期版本號不符,則不會執行其任務。這並不一定是由於不相容造成的:大多數此類特定版本實用程式在 MS-DOS 7 下都能成功執行,此時 Setver.exe 驅動程式 (5.01-02) 會將其表中的預期版本號替換為實際的 DOS 版本號。DOS 版本號不匹配可能會導致其他問題:當在當前目錄中遇到屬於不同 DOS 版本的同義實用程式時,無法透過 PATH 環境變數 (2.02-02) 定址 MS-DOS 7 中的正確實用程式,因為 DOS 會首先在當前目錄中開始搜尋並找到不正確的實用程式。在 MS-DOS 7 中,特定版本的實用程式包括:Attrib.exe、Chkdsk.exe、Command.com、Debug.exe、Diskcopy.com、Doskey.com、Fc.exe、Find.exe、Format.com、Label.exe、Mem.exe、Mode.com、Sort.exe、Subst.exe、Xcopy.exe。這個問題有一個明顯的解決方案:命令列中每個特定版本實用程式的名稱前面都應加上完整路徑。明智的做法是為使用正確指定的路徑執行特定版本實用程式準備特殊的批處理檔案或檔案管理器選單項(示例 - 在 9.03 中)。本章中提供的實用程式用法的大多數示例都不包含路徑規範。這意味著 Setver.exe 驅動程式、PATH 環境變數值和檔案放置已預先準備就緒,以便可以透過名稱呼叫每個特定實用程式。

6.01 ATTRIB.EXE – 屬性更改實用程式

[編輯 | 編輯原始碼]

在目錄中,每個檔案都由一個記錄表示 (A.09-1)。此記錄中的屬性位元組 0Bh 指定檔案的狀態和訪問許可權 (A.09-2)。可以透過 ATTRIB.EXE 實用程式更改與特定檔案相關的記錄中的屬性位元組 0Bh,例如,以以下方式啟動:

Attrib.exe +R –A C:\DOS\COM\*.txt /S

其中

+R –A 設定屬性 R(只讀)並刪除屬性 A(歸檔);最多可以指定四個屬性:A、H(隱藏)、R 和 S(系統),每個屬性前面都帶有“+”(要設定)或“–”(要刪除)。未提及的屬性保持不變。
C:\DOS\COM\*.txt – 要處理的檔案的路徑和掩碼規範示例(= C:\DOS\COM 目錄中的所有文字檔案)。如果未指定路徑,則表示當前目錄中的檔案。可以使用特定檔名代替掩碼。
/S 此選項規定繼續在指定(或隱含的當前)目錄的子目錄中搜索要處理的檔案。
注意
  1. 如果在命令列中未指定屬性,則 ATTRIB.EXE 實用程式會顯示已找到哪些請求的檔案,並顯示其特徵(包括屬性)的摘要。

6.02 CHKDSK.EXE – 磁碟檢查工具

[編輯 | 編輯原始碼]

CHKDSK.EXE 是一個用於分析和修復軟盤和使用 FAT12、FAT16 或 FAT32 檔案系統格式化的硬碟驅動器上的 FAT(檔案分配表)的實用程式。透過比較第一個和第二個 FAT 表(以及目錄)中的資料,CHKDSK.EXE 會發現交叉連結和丟失的簇。後者將轉換為字尾為 *.CHK 的檔案,並寫入同一磁碟的根目錄中。CHKDSK.EXE 完成檢查後,會顯示結果摘要。在沒有引數的情況下執行時,CHKDSK.EXE 會使用預設設定檢查當前磁碟。此外,您還可以指定以下選項

Chkdsk.exe C: /F /V

其中

C 要檢查的磁碟的規範示例。
/F 立即修復找到的錯誤的許可權。
/V 顯示每個已處理檔案的名稱及其完整路徑的規定。
注意
  1. SCANDISK.EXE 實用程式 (6.21) 執行 CHKDSK.EXE 執行的所有檢查,以及一些額外的檢查。因此,CHKDSK.EXE 僅作為資訊實用程式,顯示磁碟使用情況的摘要。
  2. CHKDSK.EXE 不應應用於網路驅動器、CD-ROM 和 Assign.com、Subst.exe 和 Join.exe 實用程式安排的虛擬磁碟。
  3. CHKDSK.EXE 實用程式不會檢查檔案是否可讀或已損壞。
  4. 帶有 /F 引數的 CHKDSK.EXE 實用程式不應應用於疑似感染病毒的磁碟:應首先應用防病毒程式。
  5. CHKDSK.EXE 實用程式不應應用於具有 4085 到 4087 個簇的磁碟,因為它可能會在這些磁碟中報告不存在的錯誤,並且嘗試修復這些錯誤可能會破壞儲存的資料。

6.03 CHOICE.COM – 選擇輸入實用程式

[編輯 | 編輯原始碼]

CHOICE.COM 工具旨在透過命令直譯器在批處理檔案執行過程中安排互動式選單。CHOICE.COM 接受從鍵盤或透過重定向傳送的字元,然後根據該字元在一系列預定義選項中的編號設定 ERRORLEVEL 值(3.15-03,9.07-03)。以下是一個 CHOICE.COM 使用示例,其中包含其主要功能

Choice.com /C:YNC /T:C,10 Yes, No or Continue

其中選項為

/C:YNC /C: 引數引入一個要接受的字元列表。返回的 errorlevel 值對應於此序列中接受的字元的順序,例如:Y – 1,N – 2,C – 3。當未指定 /C: 選項時,預設值為 YNY – 1,N – 2)。
/T:C,10 設定等待時間限制為 10 秒(允許 0-99),然後,如果未按下任何鍵,則將 C 選項作為預設選項(在此示例中,errorlevel 為 3)。當未設定時間限制時,CHOICE.COM 將無限期等待。時間限制 0 強制立即做出預設選擇:因此,CHOICE.COM 工具可用於設定 errorlevel。
是、否或繼續 - 顯示在等待時間開始之前的可選提示的示例。如果行的最後部分包含一組單詞,並且前面沒有斜槓,則此組單詞將顯示為提示訊息。

在提示訊息之前,可以指定兩個可選引數

/S 將選擇字元視為區分大小寫。
/N 不將顯示的提示訊息附加到備選選擇列表和問號。

CHOICE.COM 返回的 Errorlevel 值在直譯器內部命令的執行過程中保持不變,並且可以考慮以影響批處理檔案解釋的後續過程。Errorlevel 值可以在批處理檔案的後續行中透過一系列“if errorlevel”條件(3.15-03)或在 FOR 迴圈(3.13)內檢查,並將 errorlevel 值分配給環境變數,例如

FOR %%Z in (1 2 3) DO if errorlevel %%Z set Err=%%Z

以類似的方式,FOR 迴圈可用於使用“GOTO L%%Z”命令執行條件跳轉,但為此目的,應以相反的順序列出括號中的預期 errorlevel 值。

CHOICE.COM 工具的另一個完全不同的應用是單詞解析。要解析的單詞可以是路徑,例如,如果需要檢查指定磁碟的可寫性、路徑中每個目錄的存在性等。假設檔案 CHECK.BAT 包含一個分析程式,該程式需要逐個字母地呈現單詞。為此,應按如下方式使用 CHOICE.COM 工具

ECHO ; | Choice /S /C:;Anyword; Call Check.bat > Temp.bat
Call Temp.bat

此處要解析的單詞(例如:Anyword)括在分號中,這保證了首字母和尾字母的正確分離。此外,由於在允許的備選方案中存在重定向的答案(ECHO ;;),分號保證了不停的執行。提示訊息由“呼叫 CHECK.BAT”一組單詞表示。此輸出訊息傳送到 STDOUT 後,將重定向到臨時檔案 TEMP.BAT。執行第一行後,建立的 TEMP.BAT 檔案將包含以下字串

Call Check.bat [;,A,n,y,w,o,r,d,;]?

顯示的第二行呼叫 TEMP.BAT 檔案的執行。在此執行過程中,要解析的單詞的所有字母都將作為引數(從 %2 及其後)呈現給 CHECK.BAT,並且可以逐個單獨分析。

注意
  1. 如果使用者透過按下 CTRL-BREAK 或 CTRL-C 鍵組合來中斷批處理執行,則 CHOICE.COM 工具將返回 errorlevel 0。
  2. 當用戶按下任何其他鍵而不是預期鍵時,CHOICE.COM 會向控制檯傳送蜂鳴聲訊號(07h 控制符號)。
  3. 當 CHOICE.COM 遇到任何錯誤時,它將返回 errorlevel 255。

6.04 COMMAND.COM – 命令直譯器

[編輯 | 編輯原始碼]

命令直譯器 COMMAND.COM 是一個駐留程式,它顯示命令提示符,允許從命令列執行命令,以及自動執行批處理檔案中的命令。檔案 COMMAND.COM 包含第 3 章中指定的全部內部命令的程式碼。

COMMAND.COM 在最終啟動階段獲得對 PC 的控制權,此時 IO.SYS 直譯器在 CONFIG.SYS 檔案中執行 SHELL 命令(4.26)。第一次執行載入 COMMAND.COM 的駐留模組,並使用全域性變數安排其主(父)環境。之後,每次後續執行 COMMAND.COM 都建立一個派生(子)環境,繼承前一個(父)環境中所有變數的副本。

與普通工具相反,COMMAND.COM 在其 PSP(= 程式段字首,A.07-1)中不保留對父 PSP 的引用,因此父環境被隱藏保留,無法合法訪問。重複執行 COMMAND.COM 可以更改本地環境變數並以其他方式執行應用程式檔案(例如,逐步執行)。完成其任務後,最後載入的 COMMAND.COM 駐留模組可以使用 EXIT 命令(3.12)從記憶體中解除安裝。然後其派生(子)環境及其所有變數都將丟失,前一個(父)駐留模組的活動狀態將恢復,並且前一個(父)環境再次可訪問。

以下是如何載入命令直譯器的示例,特別是為了逐步執行單個批處理檔案

Command.com C:\dos\ CON /E:1008 /L:512 /U:255 /Y /C R:\Trial.bat

其中

C:\dos\ COMMAND.COM 檔案的路徑示例。此路徑(帶尾部反斜槓!)用於在新環境中編譯 %COMSPEC% 環境變數的值。路徑項應位於所有其他引數之前。如果省略路徑,則 %COMSPEC% 變數將從父環境繼承其值。
CON I/O 操作的裝置規範示例。CON 代表控制檯,即用於輸出的顯示器和用於輸入的鍵盤。CON 是預設裝置,因此可以省略其規範。其他裝置規範(3.07)也允許,但所選裝置必須準備好支援 COMMAND.COM 的互動活動。
/E:1008 為環境變數保留 1008 位元組記憶體的可選規定(允許 256-32768)。預設環境的大小足以容納所有繼承的變數,但不少於 160 位元組。
/L:512 內部緩衝區大小的可選規範,以位元組為單位(允許 128-1024,預設值為 256)。此大小必須足夠大,以容納命令列以及所有顯式值和命令的替換。
/U:255 輸入緩衝區大小的可選規範,以位元組為單位(允許 128-255,預設值為 128)。此大小設定原始命令列的最大長度(在進行別名替換之前)。
/Y 此選項強制逐步解釋批處理檔案中的行。當與 /P 引數(永久載入,見下文)一起使用時,將忽略 /Y 選項。
/C 此可選引數宣佈以下名稱是要執行的程式的名稱,並且直譯器的駐留模組必須在執行此程式後自動解除安裝自身。如果直譯器的駐留模組應該保持載入狀態,則應使用 /K/P 引數代替 /C/K 引數執行相同的操作,但允許稍後使用 EXIT 命令(3.12)解除安裝駐留模組。/P 引數不宣佈程式的名稱,它表示永久載入直譯器的駐留模組,並且停用 EXIT 命令。當 COMMAND.COM 首次使用 SHELL 命令(4.26)從 CONFIG.SYS 檔案的一行載入時,/P 引數必須是命令列中的最後一個引數。
R:\Trial.bat - 要由 COMMAND.COM 直譯器執行的檔案的名稱示例。可執行檔案的名稱可以在 /C/K 引數之後指定,這兩個引數必須是命令列中 COMMAND.COM 的最後一個引數。所有後續引數(如果有)將被視為屬於指定的可執行檔案。

除了顯示的引數外,COMMAND.COM 直譯器還接受以下選項

/MSG 將錯誤訊息文字載入到記憶體中。如果發生錯誤,阻止從磁碟讀取訊息文字,則此選項確保顯示適當的錯誤訊息。
/LOW 此選項強制將命令直譯器的駐留模組載入到常規記憶體(低於 640 kb)。/LOW 引數與 /P 引數一起用於永久載入。
/F 此選項規定跳過對可能錯誤的查詢,並繼續執行,就像使用者回答“失敗”一樣。/F 引數僅在與 /C 引數一起用於執行單個命令時才有效。但是,FOR 命令(3.13)在迴圈的所有操作中保持 /F 引數有效,並且 CALL 命令(3.02)在輔助批處理檔案的所有操作中保持其有效。
/Z 此選項強制在執行任何返回 errorlevel 值的實用程式後顯示 errorlevel 值。
注意
  1. /C 引數會影響用於終止批處理檔案執行(1.03)的鍵盤功能。
  2. 當 COMMAND.COM 使用 /P 引數永久載入時,其第一個預設任務是解釋 AUTOEXEC.BAT 檔案,該檔案隱含地存在於當前磁碟的根目錄中。
  3. 當透過 SHELL 命令(4.26)隱式啟動 AUTOEXEC.BAT 的執行時,AUTOEXEC.BAT 內部的 %0 引數無法用於啟動遞迴。
  4. 使用 /K 引數載入後,COMMAND.COM 能夠透過輸入重定向(參見 2.04-02、2.04-05,以及第 6.05 部分引言文章的註釋 1)接受來自其他程序或命令檔案/的命令。
  5. 批處理檔案(以 *.BAT 為字尾)與其直譯器 COMMAND.COM 共享一個公共環境。普通可執行檔案(以 *.COM*.EXE 為字尾)獲取該環境的副本。

6.05 DEBUG.EXE – 偵錯程式和微型彙編器

[編輯 | 編輯原始碼]

DEBUG.EXE 是一個專門的命令直譯器(偵錯程式),由 Tim Patterson 編寫,作為建立該作業系統的工具,該作業系統後來被微軟收購,並被稱為第一個版本的 MS-DOS。DEBUG.EXE 有助於發現和修復程式可執行程式碼和 PC 硬體設定中的錯誤。DEBUG.EXE 的功能不僅限於其內部命令集,因為這些命令能夠彙編任何機器程式碼並立即執行它。當然,DEBUG.EXE 不是編寫複雜程式的工具;它無法與高階語言競爭。但是,當您無法依賴已知的編譯器時,當您必須檢查某些內容或清除某些內容時,情況會決定其他標準。如果您在 CPU 的真實模式下使用 DEBUG.EXE 執行此操作,則所有 AT 相容計算機都會服從您的處置。您將直接訪問磁碟、埠、記憶體和可執行檔案內的程式碼。

啟動 DEBUG.EXE 的命令列可能包含要載入的檔案的名稱,以便在啟動時載入並準備好進行除錯,例如

Debug.exe Trial.com /B /S

其中

Trial.com - 要檢查的檔案的示例,所有後續專案(在此示例中為“/B /S”)都被視為此檔案(而不是偵錯程式本身!)的選項。這些選項被寫入檔案的 PSP(= 程式段字首),就像檔案由直譯器 COMMAND.COM 載入以執行時所做的那樣。RAM 中檔案的精確佈局取決於檔案的字尾(有關詳細資訊,請參閱文章 6.05-10)。

如果要載入的檔案未在命令列中指定,則可以使用偵錯程式的內部命令“N”(6.05-12)和“L”(6.05-10)稍後定義並載入。延遲載入提供了從任意地址開始程式碼佈局的機會。這尤其對於組裝和除錯驅動程式非常重要(詳細資訊請參見文章 6.05-18)。

與 COMMAND.COM 直譯器一樣,DEBUG.EXE 啟用命令列編輯鍵(1.05)並接受來自命令列的命令。如果存在任何重定向輸入(2.04-02),DEBUG 會將其作為一系列命令而不是來自鍵盤的命令來接受。此功能能夠將命令序列寫入文字命令檔案,然後將其傳送到 DEBUG.EXE 以進行自動執行。

Debug.exe < Cmnd_txt.scr

所有要載入或寫入的程式碼規範都可以包含在這些命令檔案中(示例請參見文章 9.02、9.06、9.08、9.10)。

注意
  1. 當直譯器從命令檔案接受重定向命令時,它會失去透過 STDIN 通道與鍵盤的通訊,因此無法透過中斷 INT 21\AH=01h、06h、07h、08h、0Ah 執行資料輸入(8.02-02、8.02-04、8.02-06)。由於同樣的原因,如果命令檔案最後一行沒有恢復與鍵盤通訊的命令,直譯器可能會掛起。最常使用“Q”命令執行此任務,終止每個偵錯程式會話。在不終止偵錯程式會話的情況下恢復與鍵盤通訊的另一種方法在文章 9.07-02 中進行了說明。
  2. Paul Vojta 開發了 DEBUG.EXE 的增強修改版。與原始的 Microsoft 偵錯程式相比,主要區別在於增強修改版能夠“理解”現代處理器的機器命令。包含增強偵錯程式版本 1.13(2008 年)的存檔 Debug113.zip 可以從以下網站下載:http://www.japheth.de/dwnload4.html。除非另有說明,否則第 6.05 部分中的所有後續文章同樣適用於 Paul Vojta 的增強偵錯程式。

6.05-01 DEBUG.EXE:命令和地址

[編輯 | 編輯原始碼]

啟動後,DEBUG.EXE 會顯示其“–”(連字元)提示符。這意味著 DEBUG.EXE 已準備好接受命令。

偵錯程式的命令由一個或兩個字母的指令名稱組成,後面可以跟由空格或逗號分隔的引數。如果在任何特定位置省略分隔符都不會導致歧義,則可以省略分隔符。DEBUG.EXE 將數字視為十六進位制,將大小寫字母視為相同;此規則的唯一例外是使用 SEARCH 命令(6.05-16)進行資料比較。

大多數情況下,命令名稱後面的第一個引數指定起始點記憶體地址。它可以以完整形式表示——作為段地址和偏移量(例如,1FA5:0100),或顯式引用段暫存器(例如,CS:0100),或以簡短形式表示——僅作為偏移量(例如,0100)。在後一種情況下,段將由“A”(彙編)、“G”(執行)、“L”(載入)、“P”(繼續)、“T”(跟蹤)、“U”(反彙編)和“W”(寫入)命令的 CS(程式碼段)暫存器定義;對於其他命令,它將由 DS(資料段)暫存器定義。長度小於 4 位的偏移量規範被視為具有前導零。例如,偏移量 100 被解釋為 0100h。

所有段暫存器中的初始段地址都相同,由 DOS 在 DEBUG.EXE 請求時分配,以放置要除錯的程式碼。此程式碼將不僅從分配段的開頭寫入,還將從由 IP(=指令指標)暫存器中的偏移量定義的某個偏移點寫入。偏移量的初始設定是 0100h(即十進位制 256)。分配段開頭保留的 256 位元組稱為 PSP = 程式段字首(詳細資訊請參見附錄 A.07-1)。

如果偵錯程式命令的操作針對一組位元組,則該組由其起始點地址和長度或起始點地址(段:偏移量)和結束點偏移量定義。指定組大小(長度)的引數以字母“L”開頭——例如,L20 指定一組 20h 位元組。起始偏移量和長度的總和不得超過 FFFFh。如果長度規範位置的十六進位制數前面沒有字母“L”,則將其解釋為同一段內的結束點偏移量。不允許為結束點指定單獨的段。顯然,結束點偏移量必須大於起始點偏移量。

鍵入命令後,使用者透過按下 ENTER(或“CR”)鍵啟動其執行。

最簡單的偵錯程式命令僅由單個字元組成,不需要過多註釋。

Q(“退出”) – 終止偵錯程式會話,退出到 DOS。
? – 顯示偵錯程式命令列表。

但是,顯示的命令列表沒有提供其用法的清晰指南。所有必要的指南都包含在本手冊中,位於第 6.05 部分的後續文章中。

注意
  1. 如果鍵入命令時出錯,DEBUG.EXE 會在下一行顯示“錯誤”訊息,並使用 ^(插入符號)指向它無法“理解”的第一個字元。大多數情況下,只有此字元是錯誤的原因,但有時原因可能是命令列前面部分的錯誤。
  2. 絕對記憶體地址計算為偏移量與段地址之和,乘以 10h(即十進位制 16)。如果段地址例如為 1FA5h,偏移量為 0100h,則絕對記憶體地址將為 (1FA5h x 10h) + 0100h = 1FB50h。

6.05-02 DEBUG.EXE: “A”(= 彙編)命令

[編輯 | 編輯原始碼]

“A”命令將 DEBUG.EXE 切換到將組合語言指令(請參見第 7 章)轉換為可執行機器程式碼。此程式碼不會立即執行,而是寫入記憶體,從而形成一系列機器命令。翻譯完成後,可以執行形成的序列或將其儲存到檔案中。以下是在偵錯程式命令列中指定“A”命令的示例。

A 0100

ASSEMBLE 命令的字母名稱後面是記憶體單元的地址,形成的機器程式碼的第一個位元組應寫入該地址。在所示示例中,此起始地址僅由偏移量表示,但可以以文章 6.05-01 中列出的任何允許形式指定。如果未顯式指定段,則由段暫存器 CS: 定義。可以完全省略起始地址,然後由暫存器 CS:IP 的內容指向起始單元。

接受“A”命令後,DEBUG.EXE 會顯示記憶體單元的完整地址,形成的機器程式碼的第一個位元組將寫入該地址,並顯示一個閃爍的游標,從而邀請您鍵入要轉換的彙編指令。此時,DEBUG.EXE 不會接受第 6.05 部分中描述的命令,而只會接受第 7 章中描述的彙編指令。使用者透過 ENTER 鍵擊確認每個彙編指令的結束。DEBUG.EXE 會轉換輸入的指令,將其機器程式碼寫入記憶體單元,並在新行顯示新的完整地址,邀請您鍵入下一個彙編指令。

要終止彙編指令的轉換,您需要忽略偵錯程式的邀請,並在該行為空時只按 ENTER。然後,DEBUG.EXE 返回到正常的互動操作,顯示其連字元提示符,並再次準備好接受第 6.05 部分中描述的命令。如果 DEBUG.EXE 透過輸入重定向從檔案接收匯編指令,則應在此檔案中留下一空行(7.01-04),此空行將強制 DEBUG.EXE 終止彙編指令的轉換。

6.05-03 DEBUG.EXE: “C”(= 比較)命令

[編輯 | 編輯原始碼]

“C”命令顯示來自兩個記憶體單元序列的非重合位元組。跳過相同的位元組。帶有“C”命令呼叫的命令列可能如下所示。

C 113 L8 153

在字母名稱“C”之後,第一個和第三個引數是要比較的位元組所在的記憶體單元序列的起始地址。起始地址可以以任何允許的形式指定(6.05-01)。在所示示例中,兩個起始地址都僅由偏移量表示,然後兩個序列的預設段由段暫存器 DS: 定義。字母名稱“C”後面的第二個引數定義第一個序列中最後一個記憶體單元的偏移量,或者要比較的位元組序列的長度(如果數字前面有字母“L”)。在所示示例中,L8 表示長度為 8 位元組。 “C”命令後的所有三個引數都是必需的。

6.05-04 DEBUG.EXE: “D”(= 轉儲)命令

[編輯 | 編輯原始碼]

“D”命令顯示一組記憶體單元的十六進位制內容,同時在顯示螢幕的右側顯示相同的內容,以 ASCII 碼中的字元和符號表示。以下是在偵錯程式命令列中帶有“D”命令呼叫的示例。

D 19A9:02E0 L10

在字母“D”之後緊跟著一組要顯示的第一個記憶體單元的完整地址。地址可以使用任何允許的格式(6.05-01)指定。如果未指定段,則由段暫存器DS: 定義。字母“D”之後的第二個引數定義該組中最後一個記憶體單元的偏移量,或者該組的長度(如果該數字前面有字母“L”標記)。在所示示例中,L10 表示長度為10h(即16十進位制)位元組。如果未指定第二個引數,則將顯示80h位元組(即128十進位制)。如果兩個引數都省略,則將顯示80h位元組,從當前偏移量開始,每次執行“D”命令時,當前偏移量都會增加顯示的位元組組的長度。這就是為什麼每次執行“D”命令而不帶引數時,顯示的不是同一個位元組組,而是下一個位元組組的原因。由“D”命令顯示的轉儲示例顯示在圖 8-12 中(在“附錄”一章中)。

6.05-05 DEBUG.EXE: “E”(= Enter)命令

[編輯 | 編輯原始碼]

“E”命令將新內容寫入一個或多個記憶體單元。帶有“E”命令呼叫的偵錯程式命令列可能如下所示

E 0211

在所示示例中,字母“E”後面跟著記憶體單元的地址(偏移量),從該地址開始寫入新資料。當未指定段時,它由DS: 段暫存器定義。地址可以使用任何允許的格式(6.05-01)指定,但不能省略。接受此命令後,DEBUG.EXE 將顯示請求的記憶體單元的完整地址,並顯示當前該記憶體單元中存在的資料位元組。顯示的行以一個點結尾,應將其視為提示,提示使用者為該記憶體單元鍵入新的資料位元組。ASCII 程式碼資料不被“E”命令透過鍵盤接受,資料應以每個位元組兩個十六進位制數字的形式呈現。然後應按空格鍵。如果已鍵入新的資料位元組,它將寫入記憶體單元,但如果未鍵入新的位元組,則將保留該記憶體單元的先前內容。無論哪種情況,DEBUG.EXE 都會顯示下一個記憶體單元的內容,並邀請以相同的方式更改它。如果按下“–”(減號或連字元)鍵而不是空格鍵,則使用者將有機會再次嘗試更改先前記憶體單元的內容。為了終止資料輸入,您必須按 Enter 而不是空格鍵。

如果在記憶體單元地址之後,在同一命令列中指定了新的輸入資料,則“E”命令將以其他方式執行,而無需等待透過鍵盤輸入資料,例如

E 03E0 'Data error' 0D 0A

命令列中的新輸入資料可以以每個位元組兩個十六進位制數字的形式表示,也可以以字串形式表示,字串用單引號或雙引號括起來。兩種表示形式可以以任意順序交織在一行中。在寫入記憶體之前,ASCII 字元將逐位元組轉換為十六進位制形式,但包含的引號除外,引號不會轉換也不會儲存。如果一個位元組由單個十六進位制數字表示,則將其解釋為較低的半位元組,例如,“A”數字將被解釋為0Ah。無論哪種情況,資料都將寫入連續的記憶體單元,從指定的地址開始,按照它們在命令列中的放置順序寫入。

6.05-06 DEBUG.EXE: “F”(= Fill)命令

[編輯 | 編輯原始碼]

“F”命令用單個位元組或任何給定位元組序列的重複記錄填充一系列記憶體單元。在偵錯程式的命令列中,“F”命令的呼叫可能如下所示

F 03E0 L2E 0D 0A 'Reserved' 90 90

字母“F”之後的第一個引數是要填充的記憶體單元序列的起始地址。儘管起始地址可以使用任何允許的格式(6.05-01)指定,但在所示示例中,它僅由偏移量表示,然後由DS: 段暫存器定義段。第二個引數指定記憶體單元序列的長度(如果該數字前面有字母“L”標記)或該序列中最後一個單元的偏移量。在所示示例中,聲明瞭長度為2Eh 位元組(46 十進位制)。第三個和後續引數表示用於填充記憶體單元序列的位元組序列。必須指定此序列中的至少一個位元組。命令列中的資料可以以每個位元組兩個十六進位制數字的形式表示,也可以以用單引號或雙引號括起來的 ASCII 字元組的形式表示。

兩種表示形式可以以任意順序交織在一行中。在寫入記憶體之前,ASCII 字元將逐位元組轉換為十六進位制形式,但包含的引號除外,引號不會轉換也不會儲存。如果命令列中提供的資料不足以填充整個記憶體單元序列,則該過程將重複:後續單元將填充相同位元組序列的副本。相反,如果記憶體單元序列太短,則填充過程將在最後一個單元處終止,不會出現錯誤訊息。

6.05-07 DEBUG.EXE: “G”(= Go)命令

[編輯 | 編輯原始碼]

“G”命令啟動先前在記憶體中準備好的機器程式碼命令的執行。以下是在偵錯程式的命令列中使用“G”命令的示例

G =100 143

跟隨字母“G”之後的可選引數是地址。第一個地址前面帶有等號,指向要啟動執行過程的機器命令的第一個位元組。儘管起始地址可以使用任何允許的格式(6.05-01)指定,但在所示示例中,它僅由偏移量表示;因此,預設段將由CS: 段暫存器定義。如果命令列中不存在前面帶有等號的地址,則起始記憶體單元將由CS:IP 暫存器的內容指向。

那些前面沒有等號的地址是斷點。可以在命令列中為被測程式的不同分支指定多達 10 個斷點。在偵錯程式中,在斷點指向的那些記憶體單元中,DEBUG.EXE 將原始機器程式碼替換為 INT 03 中斷(8.01-04)的程式碼 CCh。

中斷 INT 03 處理程式將控制權返回給 DEBUG.EXE,然後偵錯程式在斷點記憶體單元中恢復原始機器程式碼,並存儲暫存器和標誌的狀態,從而準備進一步繼續除錯過程。為了成功終止所描述的操作,必須滿足兩個條件。首先,斷點地址必須對應於機器命令的第一個位元組,因為否則 CCh 程式碼將不會被解釋為 INT 03 呼叫,而是被解釋為先前機器命令的一部分。第二個條件是執行不應該以任何其他方式停止,除了準備好的斷點之外,因為否則 DEBUG.EXE 將不會儲存暫存器和標誌的狀態,不會恢復被替換的記憶體單元內容,並且被測程式將被破壞。您只能使用“L”命令(6.05-10)重新載入它。

如果您不打算應用斷點,則有兩種方法可以停止由“G”命令啟動的執行。第一種是呼叫 INT 21\AH=4Ch 處理程式(8.02-55),它停止執行、終止偵錯程式會話並將控制權返回給 DOS。第二種方法是呼叫 INT 20 處理程式(8.02-01),它停止執行,但不終止偵錯程式會話。原始堆疊位置處的 RET 命令(7.03-73)也會引發具有相同後果的 INT 20 呼叫。DEBUG.EXE 重新獲得控制權並開始從鍵盤或重定向接受下一個命令,具體取決於啟動方式。在透過 INT 20 呼叫停止執行後,被測程式碼很可能不會被破壞,但暫存器和標誌的最終狀態將丟失。

6.05-08 DEBUG.EXE: “H”(= Hexadecimal)命令

[編輯 | 編輯原始碼]

“H”命令計算並顯示兩個十六進位制數字的和與差,每個數字最多為四位。在偵錯程式的命令列中,它可能如下所示

H 12BA 00AE

在所示示例中,字母“H”之後的兩個引數是用於計算的原始數字。其中任何一個或兩個都可以包含少於四位數字,然後將隱含高位上的零。必須同時存在兩個引數。

6.05-09 DEBUG.EXE: “I”(= Input)命令。

[編輯 | 編輯原始碼]

"I" 命令讀取指定埠的一個位元組並顯示在螢幕上。顯示的位元組無法寫入其他位置或儲存。命令列中“I”字母后跟一個引數,即埠地址,例如

I 03f8

與普通的記憶體地址不同,埠地址與段和段暫存器無關。埠地址只是一個最多四位的十六進位制數。高位上的零可以省略。一些常用埠的地址列在附錄 A.14-1 中。

6.05-10 DEBUG.EXE : the "L" (= Load) command

[編輯 | 編輯原始碼]

"L" 命令從磁碟讀取一系列程式碼並載入到記憶體中,從指定的地址開始。要讀取的程式碼序列可以透過檔名或磁碟扇區數來定義。以下是一個使用 "L" 命令從檔案載入程式碼序列的示例:

L 0100

所示示例中的唯一引數是記憶體單元地址,程式碼序列的寫入應從該地址開始。地址可以用任何允許的形式指定(6.05-01),但當省略段時,它由 CS: 段暫存器定義。假定要讀取的檔名已由 "N" 命令(6.05-12)寫入 PSP(A.07-1)中,或者最初是從啟動偵錯程式的命令列引數傳遞到 PSP 中。此外,假定自將檔名寫入 PSP 以來,DS: 段暫存器的內容沒有更改,因此 "L" 命令仍然可以引用 DS: 中的段地址來從 PSP 讀取該檔名。

可以省略“L”字母后的地址,然後程式碼序列將從地址 CS:0100 開始載入,但從字尾為 *.EXE 和 *.HEX 的檔案載入除外。這些檔案包含具有補充載入規範的頭部。

*.HEX 檔案頭部後的補充偏移量將新增到預設取值(0100h)或“L”命令後指定的偏移量。對於 *.EXE 檔案,將忽略“L”命令後指定的偏移量,不會載入 *.EXE 檔案的頭部。為了檢視“按原樣”載入的沒有頭部的檔案或根本未載入的檔案,應替換其後綴(最好替換為 *.BIN)。在任何情況下,檔案的長度都儲存在 CX 暫存器中。如果長度超過 64 kb,則長度的高位將寫入 BX 暫存器。

要從邏輯磁碟的扇區載入程式碼序列,命令列必須包含四個必需的引數,例如

L 0100 2 0 1

第一個引數與前面的示例一樣,是記憶體單元地址,程式碼序列的寫入應從該地址開始。第二個引數被解釋為邏輯磁碟號:0 – 磁碟 A:,1 – 磁碟 B:,2 – 磁碟 C:,依此類推。第三個引數表示要讀取的第一個扇區的實際十六進位制編號;第四個引數表示要讀取的扇區數,以十六進位制表示。一次最多可以讀取 80h 個扇區。特別是,所示示例指定從邏輯磁碟 C: 讀取扇區號 0(引導扇區)的一個扇區,並將內容寫入從地址 CS:0100 開始的記憶體中。與從檔案載入不同,從磁碟扇區載入不會導致將載入序列的長度寫入暫存器。物理磁碟扇區超出邏輯磁碟範圍,"L" 命令無法訪問。

6.05-11 DEBUG.EXE : the "M" (= Move) command

[編輯 | 編輯原始碼]

"M" 命令將記憶體中一個位置的資料塊複製到另一個位置。在偵錯程式的命令列中,“M”字母后必須跟三個必需的引數,例如

M 0100 L20 0180

在此示例中,第一個引數指定源資料塊的起始地址,第三個引數指定目標記憶體空間的類似起始地址。這兩個地址都可以用任何允許的形式指定(6.05-01)。如果地址僅由偏移量表示,則段由 DS: 段暫存器定義。命令列中的第二個引數表示源資料塊的長度(如果數字前有字母“L”標記)或其最後一個位元組的偏移量。這裡第二個引數 L20 表示源資料塊的長度為 20h 位元組(十進位制 32)。

如果源資料塊和目標記憶體空間沒有重疊,則源資料塊中的資料保持不變。但是,當目標記憶體空間與源資料塊重疊時,該塊重疊部分中的資料將被覆蓋,不會顯示錯誤訊息。在任何情況下,複製的順序都選擇為先複製要覆蓋的位元組。

6.05-12 DEBUG.EXE : the "N" (= Name) command

[編輯 | 編輯原始碼]

"N" 命令宣告一個檔名,該檔案稍後將由 "L" 命令(6.05-10)載入或由 "W" 命令(6.05-19)寫入。字母“N”後必須跟一個檔名,例如

N Trial.com /S /D

如果指定名稱的字尾存在,則不能省略。檔名前面可以加上路徑,後面可以跟一組引數(如所示示例中的“/S /D”)。

"N" 命令宣告的所有資料都寫入 PSP 區域(A.07-1)的地址 DS:0081 及其之後的位置。此外,寫入字串的長度儲存在 DS:0080,不帶字尾的檔名儲存在 DS:005D,字尾儲存在 DS:0065。由於提到的地址引用 DS: 段暫存器,因此在 "L" 或 "W" 命令請求寫入資料之前,其內容不得更改。當執行 "N" 命令時不帶引數,它會覆蓋 DS:005C–DS:0080 記憶體單元中的資料,並在記憶體單元 DS:0081 中寫入程式碼 0Dh。

注意
  1. CS: 和 DS: 暫存器的初始設定相同。因此,在預設地址 CS:0100 下載入被測程式可能會導致覆蓋 PSP 資料(A.07-1),包括儲存的檔名。此外,載入的程式碼本身也可能因 "N" 命令寫入 PSP 的資料而損壞。

6.05-13 DEBUG.EXE : the "O" (= Output) command

[編輯 | 編輯原始碼]

"O" 命令將資料位元組傳送到指定的埠。偵錯程式命令列中的字母“L”後必須跟兩個引數,例如

O 0378 00

第一個引數表示埠地址,第二個引數是要傳送的位元組。與普通的記憶體地址不同,埠地址與段和段暫存器無關。埠地址只是一個最多四位的十六進位制數。高位上的零可以省略。一些常用埠的地址列在附錄 A.14-1 中。

注意
  1. 不謹慎使用 "O" 命令可能會影響重要的 PC 設定並導致嚴重故障。

6.05-14 DEBUG.EXE : the "P" (= Proceed) command

[編輯 | 編輯原始碼]

"P" 命令啟動預先準備或載入到記憶體中的指定數量的機器指令的執行。如果執行由 "P" 命令啟動,則迴圈(7.03-55 – 7.03-57)、子程式呼叫(7.03-08)、重複(7.02-03、7.02-04)和中斷(7.03-28)不會逐一跟蹤,而是像執行一條機器指令一樣執行。此功能是 "P" 和 "T"(6.05-17)命令之間的主要區別。帶有 "P" 命令的偵錯程式命令列可能如下所示:

P =0100 5

"P" 字母后第一個引數是機器指令的地址,旨在啟動執行。此地址可以用任何允許的形式指定(6.05-01),但必須以等號開頭。如果地址僅由偏移量表示,如所示示例,則預設段由 CS: 段暫存器定義。第二個引數指定要執行的機器指令的數量。這兩個引數都可以省略,然後只執行一條指令,即 CS:IP 指向的那一條。

機器指令執行後,“P”命令顯示暫存器和標誌的當前狀態,並顯示尚未執行的下一條機器指令的反彙編結果。

注意
  1. “P”命令不應該應用於直接從固定儲存晶片或只讀儲存器 (ROM) 讀取的機器指令。對於此類目的,應改用“T”命令 (6.05-17)。

6.05-15 DEBUG.EXE: “R” (= 暫存器) 命令

[編輯 | 編輯原始碼]

如果在命令列中輸入單個字母 R 並按 ENTER 鍵,則 DEBUG.EXE 將顯示 CPU 主暫存器和標誌的當前狀態。下面圖 1 顯示了 DEBUG.EXE 啟動時設定的暫存器和標誌的典型初始狀態。

圖 1

需要注意的是,在所有顯示的段暫存器 (DS、ES、SS、CS) 中,都寫入了相同的十六進位制數字:它是 DOS 為除錯實驗分配的記憶體空間的段地址。其他暫存器和標誌獲取預定的初始狀態。標誌初始狀態的雙字母表示具有以下含義

NV 無溢位;
UP 向上計數,或偏移量的增量計算;
EI 啟用中斷;
PL 正數;
NZ 非零值或不等式;
NA 第 4 位沒有進位;
PO 奇校驗,最低有效位元組中位的奇數和;
NC 最高有效位沒有進位。

顯示訊息的最後一行 (圖 1) 顯示了 CS:IP 指向的記憶體單元中的機器指令程式碼,以及該程式碼的反彙編表示。如果 DEBUG.EXE 使用預設引數給出“T” (6.05-17) 或“P” (6.05-14) 命令,則將執行此機器指令。

如果偵錯程式命令列中的字母名稱“R”後面跟著引數“F”,則您可能會獲得更改標誌狀態的機會

R F

DEBUG.EXE 透過顯示當前標誌狀態以及連字元(表示輸入所需標誌狀態的雙字母表示的邀請)來響應此命令。可以透過鍵入以下輸入來設定與圖 1 中顯示的相反的標誌狀態

OV 算術運算後的溢位;
DN 向下計數,或偏移量的減量計算;
DI 停用中斷;
NG 負數;
ZR 零值或相等性;
AC 第 4 位有進位;
PE 偶校驗,最低有效位元組中位的偶數和;
CY 最高有效位有進位。

標誌狀態輸入的順序無關緊要。如果未指定某些標誌的新狀態,則這些標誌將保留其先前狀態。

為了獲得更改暫存器狀態的機會,偵錯程式命令列中的字母名稱“R”後面必須跟著該暫存器的名稱,例如

R AX

顯示的命令開啟 AX 暫存器以寫入新值。“R”命令還允許開啟暫存器 BX、CX、DX、BP、SP、DI、SI、CS、DS、ES、SS、IP(以及 PC——它是同一 IP 暫存器的另一個名稱)。收到顯示的命令後,DEBUG.EXE 將顯示該暫存器的先前內容和冒號,從而邀請您輸入最多四個十六進位制數字的新值。如果您不鍵入新資料而只是按 ENTER 鍵,則將保留該暫存器中的先前值。“R”命令不提供對 16 位暫存器的高位元組和低位元組(例如,AX 暫存器內的 AH 和 AL)的單獨訪問。如果要更改僅一個位元組的狀態,則必須為同一暫存器的另一個位元組指定未更改的先前值。

注意
  1. 本文中提到的 8 個標誌並非現代 CPU 中的所有標誌。有關更完整的標誌列表,請參見附錄 A.14-4。

6.05-16 DEBUG.EXE: “S” (= 搜尋) 命令

[編輯 | 編輯原始碼]

“S”命令在有限的搜尋區域內搜尋指定的位元組序列。位元組序列和搜尋區域都必須由偵錯程式命令列中“S”命令後面的引數定義,例如

S 0100 L200 20 'st'

“S”後面的第一個引數是搜尋區域的起始地址。儘管起始地址可以以其任何允許的形式指定 (6.05-01),但在所示示例中,它僅由偏移量表示,然後預設段由 DS:段暫存器定義。第二個引數指定搜尋區域的長度(如果數字前面有字母“L”標記)或該區域最後一個單元格的偏移量。在所示示例中,聲明瞭長度為 200h 位元組(十進位制 512)的長度。第三個和所有後續引數表示要搜尋的位元組序列。必須指定此序列的至少一個位元組。

序列的位元組可以用每個位元組兩個十六進位制數字表示,也可以用括在單引號或雙引號中的 ASCII 字元組表示。兩種表示形式可以以任意順序交織在一行中。在考慮之前,ASCII 字元將逐位元組轉換為十六進位制形式,但包含的引號除外,這些引號不包含在準備好的序列樣本中。在搜尋過程中,大寫和小寫字母將被視為不同的字母。

搜尋完成後,DEBUG.EXE 將顯示搜尋區域中找到所需序列的所有地址。重要的是要注意,DEBUG.EXE 不會分析找到的位元組序列的任務。資料字串和機器指令可能包含完全相同的位元組序列。解決此類不確定性是使用者的特權。

6.05-17 DEBUG.EXE: “T” (= 跟蹤) 命令

[編輯 | 編輯原始碼]

“T”命令啟動預先準備或載入到記憶體中的指定數量的機器指令的執行。“T”命令可以跟蹤迴圈、子程式呼叫、中斷處理程式等內部的機器指令執行。此功能是“T”和“P” (6.05-14) 命令之間的主要區別。以下是在偵錯程式命令列中使用“T”命令的示例

T =0100 5

“T”後面的第一個引數是要開始執行的機器指令的地址。此地址可以以其任何允許的形式指定 (6.05-01),但必須以等號開頭。如果地址僅由偏移量表示,如所示示例中,則預設段由 CS:段暫存器定義。第二個引數指定要執行的機器指令的數量。這兩個引數都可以省略,然後僅執行一條指令,即 CS:IP 指向的那一條。機器指令執行後,“T”命令顯示暫存器和標誌的當前狀態,並顯示尚未執行的下一條機器指令的反彙編結果。

注意
  1. 由於“T”命令跟蹤迴圈、子程式呼叫和中斷處理程式內部的機器指令執行,因此它可能涉及非常長的指令序列,需要花費太多時間來跟蹤。在這種情況下,應優先使用“P”命令 (6.05-14)。

6.05-18 DEBUG.EXE: “U” (= 反彙編) 命令

[編輯 | 編輯原始碼]

“U”命令顯示從一組記憶體單元的可執行機器程式碼轉換得到的彙編指令。使用“U”命令的偵錯程式命令列可能如下所示

U 014B L10

“U”命令的第一個引數是所選組中第一個記憶體單元的地址。地址可以以其任何允許的形式指定 (6.05-01)。如果未指定段,則由 CS:段暫存器定義。“U”後面的第二個引數定義所選組中最後一個記憶體單元的偏移量或該組的長度(如果數字前面有字母“L”標記)。在所示示例中,L10 表示長度為 10h(即十進位制 16)位元組。如果省略引數,則將從 CS:段內的當前偏移量開始轉換 20h 位元組的程式碼。每次執行“U”命令時,當前偏移量都會增加轉換的位元組組的長度,以便每次執行“U”命令時,即使不帶引數,也顯示從不同的記憶體單元組中轉換的程式碼。

需要注意的是,“U”命令無法區分可執行程式碼和其他資料,也無法找到長機器指令的第一個位元組。當指定的起始地址不對應指令的第一個位元組,或者當反彙編應用於資料時,則翻譯結果會產生垃圾。圖 2 中顯示了兩個反彙編的示例:第一個對應於起始地址 (0181h) 的正確指定,另一個顯示了錯誤指定的後續結果。

圖 2

如果起始地址指定不正確 (0180h),則偏移量為 0180h 和 0184h 的位元組的翻譯會產生無效結果,但在之後,反彙編的“階段”會進入一個正確的穩定狀態。如果翻譯的機器指令是正確的並且 DEBUG.EXE 能夠識別,則達到正確穩定狀態的隨機過程通常需要最多 10h 個位元組,並且不會影響進一步的翻譯。

當然,命令應該像處理器理解的那樣進行反彙編。但是,相同的機器程式碼可以以不同的方式解釋。差異的一個原因是短跳轉指令的機器程式碼不包含跳轉目標地址,而是包含相對於 IP 暫存器當前內容的目標偏移量。偵錯程式透過將這些偏移量新增到 IP 暫存器內容來計算目標地址。後者取決於起始偏移量,即要反彙編的程式碼的第一個位元組載入的偏移量。因此,除非要反彙編的程式碼像執行時一樣載入,即對於驅動程式從 CS:0000 地址開始載入,對於 *.COM 和 *.EXE 程式從 CS:0100 地址開始載入,否則無法正確執行短跳轉指令的反彙編。

處理器和偵錯程式對機器程式碼解釋的差異的另一個原因是處理器型別和狀態的影響。解釋取決於程式碼段描述符中的運算元大小位元組。[註釋 5 至 A.12-2] 此外,還有一些機器程式碼以 64 位處理器特殊的方式解釋。但是,DEBUG.EXE 並不“知道”特定呈現的機器程式碼的正確處理器型別和狀態。它只能反彙編為 16 位執行設計的那些機器程式碼。強制 DEBUG.EXE 反彙編其他機器程式碼毫無意義。

反彙編的無效結果可能是由偵錯程式“不知道”的那些機器指令引起的。由於這個原因,不建議使用 Microsoft 版本的 DEBUG.EXE 來反彙編現代程式。在 第 6.05 部分引言文章的註釋 2 中提出的 DEBUG.EXE 的另一個版本應該優先使用。當然,最近版本的“正規”反彙編器(IDA、SoftICE 等)要“聰明”得多,但無法提供可比的訪問自由度,甚至無法在 DOS 下工作。對於那些被迫使用 Microsoft 版本的 DEBUG.EXE 的人,下面表格中給出了一些“未知”的機器程式碼。它的第一列顯示了機器程式碼的第一個位元組,這些位元組由 DEBUG.EXE 顯示為 DB 命令 (7.01-01) 的引數,位於單獨的行中。第一個位元組與第二列中給出的第二個位元組通常足以理解操作的型別。如有必要,第四列中的名稱和引用可以幫助查詢有關特定指令的更多資訊。

第一
位元組
第二
位元組
資料
位元組
操作,指令
0F 00 1–3 任務暫存器的載入 (LTR)
0F 01 1–3 對暫存器 GDTR、IDTR、MSWR 的呼叫
0F 02 1–3 載入訪問許可權 (LAR)
0F 03 1–3 載入段限制 (LSL)
0F 05   系統暫存器的載入 (LOADALL)
0F 2(0–3)   MOV CR、MOV DR (7.03-58 的註釋 1)
0F 4(0–F) 1–3 條件複製 (CMOV)
0F 8(0–F) 2 段內條件跳轉
0F 9(0–F)   位的條件設定/重置 (SET)
0F A(0,8)   PUSH FS、PUSH GS (7.03-69)
0F A(1,9)   POP FS、POP GS (7.03-67)
0F A2   CPU 的識別 (CPUID)
0F A(4–7) 1–2 雙字移位 (SHLD、SHRD)
0F B(2,4,5) 0–2 載入段暫存器 (LSS、LFS、LGS)
60     將 AX – DI 複製到堆疊 (PUSHA)
61     將堆疊資料彈出到 AX – DI (POPA)
62   3 陣列邊界的檢查 (BOUND)
63   2 訪問許可權的調整 (ARPL)
6(4,5)     段字首 FS:、GS: (7.02-01)
66     運算元大小字首 (7.02-06)
67     地址大小字首 (7.02-07)
6(8,A)   1–2 將數字壓入堆疊 (PUSH,7.03-69)
6(9,B)   1–3 乘法 (IMUL,7.03-25 的註釋 1)
6(C,D)     從埠組輸入 (INSB、INSW)
6(E,F)     將資料組輸出到埠 (OUTSB、OUTSW)
8(C,E) E(0–F)   MOV FS、MOV GS (7.03-58 的註釋 2)
C(0,1) E(0–7) 1 SHL bl,0f、SHL bx,0f (7.03-82)
C(0,1) E(8–F) 1 SHR bl,0f、SHR bx,0f (7.03-83)

6.05-19 DEBUG.EXE: “W” (= 寫入) 命令

[編輯 | 編輯原始碼]

“W”命令將 PC 記憶體中的一段程式碼複製到邏輯磁碟上,可以是檔案形式,也可以是直接寫入磁碟扇區。以下是如何使用“W”命令將一段程式碼寫入新檔案的示例

W 0100

所示示例中的單個引數是記憶體單元地址,程式碼序列的讀取應從此處開始。地址可以用任何允許的形式指定 (6.05-01),但當省略段時,預設段由 CS: 段暫存器定義。如果未指定地址,則程式碼序列的讀取從 CS:0100 開始。程式碼序列的長度(從起始地址計算)必須事先準備好:長度的最低兩位位元組在 CX 暫存器中,最高位位元組在 BX 暫存器中。

假設要建立的新檔案的名稱已由“N”命令 (6.05-12) 寫入 PSP (A.07-1)。名稱可以有任何字尾,除了 *.HEX 和 *.EXE,因為 DEBUG.EXE 無法為這些檔案編譯標頭檔案。另一個假設是 DS: 段暫存器的內容自從將新檔案的名稱寫入 PSP 以來沒有改變,因此“W”命令仍然可以引用 DS: 中的段地址以從 PSP 讀取此名稱。如果準備好的名稱前面沒有路徑,則將在當前目錄中建立新檔案。如果存在具有相同名稱的檔案,則會覆蓋它,不會顯示錯誤訊息。

要寫入邏輯磁碟的扇區,字母名稱“W”後面必須跟四個必需的引數,例如

W 0100 0 0 1

這裡第一個引數表示程式碼序列的起始地址,就像之前寫入檔案的示例一樣。第二個引數解釋為邏輯磁碟號:0 – 磁碟 A:,1 – 磁碟 B:,2 – 磁碟 C:,依此類推。第三個引數表示要寫入的第一個扇區的實際十六進位制數,第四個引數表示要寫入的扇區的總十六進位制數。一次最多可以寫入 80h 個扇區。扇區的總數定義了寫入的程式碼序列的長度,CX 和 BX 暫存器的內容將被忽略。特別是,所示示例指定將單個扇區號 0(引導扇區)寫入邏輯磁碟 A:。物理磁碟超出邏輯磁碟的扇區無法透過“W”命令訪問。

注意
  1. 當需要將 PSP 區域 (A.07-1) 中的一段程式碼寫入檔案時,在準備寫入檔名稱的備用記憶體空間之前,不能使用“N”命令宣告檔名稱。這可以透過將程式碼序列移出 PSP 記憶體區域或更改 DS: 段暫存器的內容來完成,以便檔名稱不會覆蓋 PSP 中的程式碼序列(文章 9.08 中的示例)。

6.05-20 DEBUG.EXE: “XA” (= 分配) 命令

[編輯 | 編輯原始碼]

“XA”命令呼叫 EMM386.EXE 記憶體管理器 (5.04-02、8.03-59),請求分配常規記憶體之外的指定記憶體空間,並將十六進位制引用號(控制代碼)分配給已分配的記憶體空間。除非 EMM386.EXE 記憶體管理器已載入且 1088 kb 以上的記憶體可用,否則無法執行請求的操作。在偵錯程式的命令列中,“XA”後面必須跟所需邏輯記憶體頁數(每個 16 kb),例如

XA 1A

所示請求的記憶體空間是 1Ah(十進位制 26)個邏輯頁,它們將從 00h 到 19h 編號。DEBUG.EXE 會以訊息響應請求,例如“控制代碼已建立 0006”。因此,可以使用十六進位制數 0006h 引用已分配的記憶體空間。但這對於訪問已分配的記憶體空間還不夠,必須執行另一個操作:“XM”命令 (6.05-22) 必須將已分配記憶體空間中選定的有限數量的邏輯頁對映到物理可定址記憶體空間上。

6.05-21 DEBUG.EXE: “XD” (= 釋放) 命令“

[編輯 | 編輯原始碼]

“XD”命令呼叫 EMM386.EXE 記憶體管理器 (5.04-02、8.03-61),請求釋放由“XA”命令 (6.05-20) 分配的特定記憶體空間。假設 EMM386.EXE 記憶體管理器已載入並且 1088 kb 以上的記憶體可用。在偵錯程式的命令列中,“XD”後面必須跟一個十六進位制引用號(控制代碼),用於識別要釋放的記憶體空間,例如

XD 0006

DEBUG.EXE 會對所示示例做出響應:“控制代碼 0006 已釋放”。從那一刻起,控制代碼 0006h 變為無效,對已釋放記憶體空間中邏輯頁的訪問將丟失,並且此空間將被視為可用。

6.05-22 DEBUG.EXE: “XM” (= 對映) 命令

[編輯 | 編輯原始碼]

“XM” 命令呼叫 EMM386.EXE 記憶體管理器(5.04-02、8.03-60),請求將分配的記憶體空間中的一個 16 kb 邏輯頁面對映到相同大小的“物理”頁面上。這裡的“對映”是指調整 CPU 中的地址轉換機制,以便 CPU 將“物理”頁面地址空間內的普通 16 位地址轉換為該地址空間中對應於指定邏輯頁面的部分的真實記憶體單元的 32 位地址。假設 PC 具有 32 位 CPU,記憶體量超過 1 Mb,EMM386.EXE 記憶體管理器已載入,並且“XA”命令(6.05-20)已為分配的記憶體空間分配了參考號(控制代碼)。

在偵錯程式的命令列中,“XM”之後必須跟三個必需的引數,例如

XM 0B 03 0006

第一個引數——在本例中為 0Bh——是分配的記憶體空間中請求的邏輯頁面的編號。第二個引數 03h 是“物理”頁面的編號。第三個引數是分配給該分配記憶體空間的參考號(控制代碼),請求的邏輯頁面屬於該分配記憶體空間。

“物理”頁面的編號可以選擇從 00h 到 1Bh,但應注意,從 04h 開始的“物理”頁面佔據傳統記憶體中的地址空間。因此,最常使用的“物理”頁面是 00h-03h,它們預設分別對應於段地址 E000h、E400h、E800h 和 EC00h。但它們在地址空間中的位置可能會受到 PC 的 BIOS 要求和 EMM386.EXE(5.04-02)記憶體管理器的設定的影響。因此,在每種特定情況下,都應使用“XS”命令(6.05-23)或呼叫 INT 67\AX=5800h 處理程式(8.03-70)來檢查“物理”頁面的放置位置。

6.05-23 DEBUG.EXE: “XS”(= 顯示)命令

[編輯 | 編輯原始碼]

“XS”命令呼叫 EMM386.EXE 記憶體管理器(5.04-02、8.03-70),請求顯示與記憶體使用情況和“物理”頁面放置位置相關的資料。假設 PC 的記憶體量超過 1 Mb,並且 EMM386.EXE 記憶體管理器已載入。由於“XS”命令不需要引數,因此包含“XS”命令的命令列如下所示:

XS

DEBUG.EXE 透過顯示一個表格來響應“XS”命令,該表格顯示有效的參考號(控制代碼)以及每個控制代碼關聯了多少個邏輯頁面。然後,顯示每個“物理”頁面的段地址。最後幾行顯示統計資訊:邏輯頁面的總數、空閒邏輯頁面的數量、最大可用控制代碼數以及已分配的控制代碼數。但是,如果表格包含 EMS 4.0 規範規定的所有 28 個“物理”頁面有關的資料,則顯示的表格將過長,無法容納在螢幕上。為了查看錶格的全部內容,您可以將輸出重定向到檔案(2.04-03),或設定影片模式 108h(A.10-1),或者透過 EMM386.EXE 驅動程式的設定(5.04-02)限制“物理”頁面的實際數量。

6.06 DISKCOPY.COM – 磁碟複製實用程式

[編輯 | 編輯原始碼]

DISKCOPY.COM 將一個軟盤的全部內容(包括卷標和序列號)複製到另一個軟盤上。兩個軟盤必須是相同型別的。以下是在配備兩個軟盤驅動的 PC 上覆制軟盤的命令列示例:

DISKCOPY.COM A: B: /V

其中

A 源軟盤所在的驅動器的磁碟機代號示例;
B 目標軟盤所在的驅動器的磁碟機代號示例;
/V 可選的驗證複製操作的指令。

除了所示選項外,DISKCOPY.COM 還可以接受

/1 僅複製軟盤一面的指令(適用於過時的單面可寫軟盤)。
/M 透過記憶體執行多遍複製的指令,當只有一個軟盤驅動器可用且不應在硬碟上安排緩衝檔案時。

如果計算機只配備了一個軟盤驅動器,則必須為源和目標指定相同的磁碟機代號。在這種情況下,DISKCOPY 在由環境變數 %TEMP% 指定的目錄中的硬碟上建立一個臨時緩衝檔案,然後提示用目標軟盤替換源軟盤,並將資料從緩衝檔案複製到目標軟盤。之後,緩衝檔案將自動刪除。但是,當未定義 %TEMP% 變數(或指定了 /M 選項)時,源軟盤會被部分複製到可用的記憶體空間中,因此您需要在同一個軟盤驅動器中多次交換源軟盤和目標軟盤。

DISKCOPY.COM 並非設計用於建立軟盤的非臨時檔案映像。此外,DISKCOPY.COM 無法合理地處理損壞的扇區。由於這些缺點,如今更傾向於使用其他複製程式。例如,可以推薦 IMG.EXE 實用程式。包含 IMG.EXE 實用程式的存檔檔案 IMG.ARJ 可從伺服器 ftp://ftp.elf.stuba.sk/pub/pc/utildisk/ 下載。

注意
  1. DISKCOPY.COM 和類似的軟盤複製實用程式不能應用於硬碟驅動器、網路驅動器、CD/DVD-ROM 以及由 ASSIGN.COM、JOIN.EXE 和 SUBST.EXE 實用程式建立的虛擬磁碟。

6.07 DOSKEY.COM – 命令列管理器

[編輯 | 編輯原始碼]

DOSKEY.COM 是 COMMAND.COM 直譯器的命令列功能的駐留補充。DOSKEY.COM 能夠編輯命令列文字,呼叫以前的命令,建立和執行宏命令,包括簡單的操作序列。透過宏命令指定的程式在 DOSKEY.COM 將其定義載入到特殊的記憶體緩衝區後可用。除了該緩衝區外,DOSKEY.COM 的駐留模組還佔用大約 4 kb 的記憶體。

MS-DOS 7 中的 DOSKEY.COM 相對於其以前的版本有所改變:它具有從文字檔案載入宏命令定義列表以及增加鍵盤緩衝區和命令列編輯緩衝區大小的功能。

DOSKEY.COM 可以從命令列或批處理檔案(AUTOEXEC.BAT 或其他)的行載入,可以直接載入,也可以使用 LH 命令(3.17)載入,例如:

LH Doskey.com /bufsize:1024 /insert /file:C:\DOS\MS7\Macro.scr

其中

/bufsize:1024 – 宏命令緩衝區的大小定義(最小為 256 位元組,預設為 512)。當第一次載入 DOSKEY.COM 或使用下面描述的 /reinstall 選項重新載入時,應使用此選項。相同緩衝區的空閒部分用於儲存以前的命令列(歷史記錄)。
/insert 將命令列切換到字元插入模式,允許在之前鍵入的字元之間插入每個後續字元。預設情況下為覆蓋模式,後續字元將替換之前的字元。
/file:C:\DOS\MS7\Macro.scr – 是從文字檔案載入宏命令定義的規範示例(後面給出了此類檔案的示例)。如果該檔案存在於當前目錄中,則可以省略檔名之前的路徑。此檔案的檔名和字尾是任意的,但如果存在後綴,則必須指定。

載入操作允許的其他選項有:

/echo:off – 停用在螢幕上顯示執行的宏命令。
/keysize:31 – 增加鍵盤預讀緩衝區的大小(預設為 15 位元組)。
/line:256 – 設定命令列編輯緩衝區的大小(預設為 128 位元組)。
/reinstall – 安裝新的 DOSKEY.COM 駐留模組。這可能需要更改緩衝區的大小,或者為了恢復因與其他 TSR 實用程式衝突而丟失的功能。每次重新安裝都會使佔用的記憶體增加大約 4 kb(因為以前的 DOSKEY.COM 駐留模組無法解除安裝)。

如果 DOSKEY.COM 已經載入,則可以使用 /H 選項再次呼叫它,以顯示儲存的先前命令(歷史記錄):

Doskey /H

或者使用 /M 選項顯示儲存的宏命令:

Doskey /M

此外,還可以再次呼叫 DOSKEY.COM,以便從命令列將另一個宏命令定義載入到記憶體緩衝區中,例如:

Doskey count=C:\DOS\COM\Find.exe /v /c "" $1

這裡,“count”一詞被解釋為新宏命令的名稱。在命令提示符附近鍵入命令列中的此名稱將啟動執行宏命令定義中等於號右側指定的命令。所示定義包含一個命令,該命令計算任何文字檔案中行的數量,此處由虛擬引數 $1 表示。在宏命令執行過程中,虛擬引數將替換為在同一命令列中宏命令名稱之後指定的實際檔名。

宏命令定義中的命令可以包含等號和變數值的替換(例如 %Temp%)。當在宏命令定義中遇到符號“$”時,它將與後面的字母(或數字)以特殊方式解釋為:

$G – 輸出重定向符號“>”(右箭頭);
$L – 輸入重定向符號“<”(左箭頭);
$B – 中間重定向符號“|”(管道);
$T – 一個宏命令內命令之間的分隔符;
$1-$9 – 虛擬引數,等效於批處理檔案中的 %1 – %9;
$* – 命令列中宏命令名稱後面的所有單詞;
$$ – 一個字元“$”(美元符號)。

用於載入宏命令定義的文字檔案必須每行包含一個定義,例如:

count=C:\DOS\COM\Find.exe /v /c "" $1
newbat=echo @echo off$G %Temp%\New.bat $T Edit.com %Temp%\New.bat

您可以透過指定宏命令名稱,後面只跟著一個等號來刪除緩衝區中的任何已載入宏命令,例如:

Doskey count=

載入 DOSKEY.COM 後,它會啟用以下“熱鍵”:

向左和向右箭頭 將游標向左和向右移動
CTRL-左箭頭 將游標向左移動一個單詞
CTRL-右箭頭 將游標向右移動一個單詞
HOME 將游標移動到命令列的開頭
END 將游標移動到命令列的末尾
INS 切換覆蓋和插入鍵盤模式
ESC 清除當前命令列
ALT+F10 從記憶體緩衝區中刪除所有宏命令
F7 顯示以前的命令列表(歷史記錄)
PageUp 從歷史記錄列表中呼叫最舊的行
PageDown 從歷史記錄列表中呼叫最新的行
向上和向下箭頭

沿歷史列表移動命令的選擇
F9 按編號從歷史列表中選擇命令
Alt+F7 清除以前的命令列表(歷史記錄)
F8 如果歷史列表中存在合適的名稱,則在命令列中將字元追加到命令名稱的其餘部分。
注意
  1. 如果命令列中宏命令的名稱前面至少有一個空格,則該宏命令不會被執行。
  2. 當宏命令與命令同義時,它會停用後者(將執行宏命令)。
  3. DOSKEY.COM 與 TSR 檔案管理器(Norton Commander、Volkov Commander 等)不相容。通常更喜歡使用檔案管理器。

6.08 DELTREE.EXE – 目錄刪除器

[編輯 | 編輯原始碼]

DELTREE.EXE 是一款極其危險的實用程式,因為它可以刪除目錄及其所有子目錄和檔案,而不管檔案屬性如何。只有邏輯磁碟的根目錄無法使用 DELTREE.EXE 刪除。其使用方法示例如下:

Deltree /Y C:\TEMP\TDIR1

其中

/Y 一個選項,規定在不提示和確認的情況下刪除。
C:\TEMP\TDIR1 – 要刪除的目錄的示例規範。一行中可以有多個這樣的規範,但不允許使用萬用字元。

6.09 EDIT.COM – 編輯器實用程式

[編輯 | 編輯原始碼]

EDIT.COM 是一款流行的雙視窗編輯器程式,主要用於文字檔案,但也具有有限的編輯二進位制檔案的功能。EDIT.COM 允許同時開啟多達十個檔案。圖 3 顯示了在 EDIT.COM 編輯器的單獨視窗中開啟的兩個不同檔案。

圖 3

要編輯的檔案可以根據 PC 的記憶體大小而定。EDIT.COM 設定了一個剪貼簿,允許在開啟的檔案之間傳送選定的文字部分。此外,EDIT.COM 能夠與滑鼠裝置驅動程式配合使用,從而使編輯更加輕鬆快捷。

EDIT.COM 編輯器可以從命令列啟動,不帶引數,然後它將顯示一個空視窗。使用者將不得不透過“檔案”選單開啟要編輯的檔案。否則,要編輯的檔案可以在命令列中指定,例如:

Edit.com C:\DOS\Addons.txt Part6.txt

要編輯的第一個檔案的名稱前面有路徑;如果沒有路徑,EDIT.COM 編輯器只能開啟位於當前目錄中的檔案。因此,第二個檔案(Part6.txt),在沒有路徑的情況下指定,必須存在於當前目錄中。預設情況下,這兩個檔案都將以文字方式開啟,但只有第一個開啟的檔案將顯示在編輯器的顯示視窗中。使用者可以選擇透過 CTRL-F6 鍵擊開啟第二個視窗,或者透過 F8 鍵擊切換初始視窗以編輯第二個開啟的檔案。

EDIT.COM 的一些預設和幫助文字儲存在檔案 EDIT.INI 和 EDIT.HLP 中(隱含地存在於同一個目錄中),但 EDIT.COM 只能在沒有幫助和僅使用預設設定的情況下應對。當 EDIT.INI 不存在時,使用者仍然可以透過“選項”選單儲存可選的預設,這將導致 EDIT.COM 重新生成 EDIT.INI 檔案。

EDIT.COM 保留了一些在 DOS 中處於活動狀態的“熱鍵”的功能。其中包括 BACKSPACE 鍵和 ALT 鍵與數字鍵盤中的數字組合,允許透過其 ASCII 碼輸入字元。但大多數其他“熱鍵”功能都被重新定義。ALT 鍵啟用上欄選單中選擇專案的文字“熱鍵”,並且還在鍵盤的文字部分啟用數字鍵,用於根據其編號選擇開啟的檔案,如果打開了多個檔案。箭頭鍵可以在編輯器視窗的任何位置移動游標。如果在游標在文字的一部分上移動時按住 SHIFT 鍵,則該文字部分將被選中(突出顯示)以進行刪除或複製到剪貼簿。當透過滑鼠將游標拖動到文字的一部分上時,也會獲得相同的效果,同時保持其左按鈕按下。

除了提到的鍵功能外,EDIT.COM 還啟用以下“熱鍵”和鍵組合:

CTRL C 將選定的文字部分複製到剪貼簿(CTRL-INS 鍵組合的作用類似);
CTRL F4 關閉活動視窗(如果兩個視窗都已開啟);
CTRL F6 將視窗分成兩部分(如果只打開了一個視窗);
CTRL F8 調整兩個視窗的大小(如果兩個視窗都已開啟);
CTRL Home 將游標移動到開啟檔案的開頭;
CTRL End 將游標移動到開啟檔案的末尾;
CTRL P 允許插入 ASCII 碼的非文字元號(在底行顯示進一步的提示);
CTRL-PageDown 將視窗向右移動一行長度;
CTRL-PageUp 將視窗向左移動一行長度;
CTRL Q 訪問查詢/替換/刪除功能(在底行顯示進一步的提示);
CTRL-Space 刪除選定的文字部分;
CTRL V 將剪貼簿的內容貼上到游標的位置;
CTRL W 向下滾動文字一行(鍵組合 CTRL-UpArrow 作用類似);
CTRL X 將選定的文字塊剪下到剪貼簿緩衝區;
CTRL Y 刪除游標指向的行,即使該行未被選中;
CTRL Z 向上滾動文字一行(鍵組合 CTRL-DownArrow 作用類似);
Delete 刪除游標位置的一個字元,如果未選擇任何文字,否則刪除選定的文字部分;
F3 查詢之前透過 CTRL-Q-F 鍵組合指定的下一個專案;
F6 切換活動視窗和被動視窗(如果兩個視窗都已開啟);
F8 切換活動視窗以顯示下一個檔案(如果打開了多個檔案);
PageUp 向上滾動顯示的文字一頁;
PageDown 向下滾動顯示的文字一頁。

上欄選單中顯示了一些“熱鍵”組合。這些選單和這些選單中的單獨專案不僅可以透過擊鍵開啟,還可以透過滑鼠的左按鈕開啟。

由於二進位制檔案沒有行結構,因此在命令列中指定換行將使它們的編輯更方便,例如:

Edit.com /78 Sc_sct.dat

其中

/78 一個選項,用於將行換行到 78 個字元寬。可以指定 78 到 255 之間的任何數字,但 78 對應於 80x25 螢幕顯示模式下編輯器的實際視窗寬度。

EDIT.COM 還可以從命令列接受以下選項:

/B 將顯示切換到單色;
/H 將顯示切換到最大允許的螢幕行數;
/R 只讀開啟檔案,排除更改的風險;
/S 強制使用短檔名;
/? 顯示聯機幫助。

6.10 EXPAND.EXE – 壓縮檔案解壓縮器

[編輯 | 編輯原始碼]

EXPAND.EXE 是用於解壓縮使用 Microsoft 的 COMPRESS.COM 實用程式壓縮的檔案的解壓縮器。每個這樣的壓縮檔案只包含一個原始檔案並繼承其名稱,除了字尾中的最後一個字元被替換為下劃線,例如 *.TX_ 而不是 *.TXT。以前版本的 MS-DOS 和一些其他軟體包包含此類壓縮檔案以及 EXPAND.EXE 解壓縮器實用程式。特別是,EXPAND.EXE 存在於 SFX 存檔 DOS62SP.EXE 中,可以從 Microsoft 的 FTP 伺服器 ftp://ftp.microsoft.com/softlib/mslfiles/ 下載。

EXPAND.EXE 解壓縮器實用程式的名稱後面必須跟著要解壓縮的壓縮檔案的名稱,然後是應該分配給已還原原始檔案的名稱,例如:

Expand.exe E:\DOS\MSDOS622\Country.tx_ C:\DOS\MS6\Country.txt

顯示的示例中的兩個路徑都是可選的。還原檔名稱之前的路徑被解釋為將解壓縮結果寫入該目錄的指令。如果省略路徑,則只會搜尋當前目錄中的壓縮檔案,並將結果放置在該目錄中,但在這種特定情況下是允許的,因為壓縮檔案和原始檔案具有不同的名稱。

EXPAND.EXE 不允許在檔名中使用萬用字元(2.01-03),但一個命令列中可以有多個壓縮檔案的名稱。在這種情況下,最後一個指定的名稱必須是目錄名稱(不帶尾部反斜槓),解壓縮的檔案應寫入該目錄。此任務的當前目錄名稱不能省略,但可以用點(2.02-03)表示。

使用舊版本的 COMPRESS.COM 壓縮的原始檔不包含有關壓縮檔案原始名稱的資訊。這些檔案將被正確解壓縮,但如果在命令列中沒有給出顯式的新名稱規範,則它們的原始名稱將不會被恢復。因此,由於可能出現名稱衝突,應避免將一個公共目錄同時用作源目錄和目標目錄。

注意
  1. Windows-2000/XP 版本中的壓縮檔案也在後綴末尾用下劃線標記,但這些檔案是使用其他演算法壓縮的。它們在 MS-DOS 7 中的解壓縮可以透過 EXTRACT.EXE(6.11)執行。

6.11 EXTRACT.EXE – *.CAB 檔案解壓縮器

[編輯 | 編輯原始碼]

EXTRACT.EXE 實用程式解壓縮由 MAKECAB.EXE 打包器壓縮的檔案。Microsoft 使用此演算法壓縮 Windows-2000/XP 版本中的單獨檔案,以及在 Windows-95/98/ME 版本中編譯帶有 *.CAB 字尾的大型多卷存檔。EXTRACT.EXE 允許從大型 *.CAB 存檔中提取單獨的檔案並顯示其內容。以下是用於從多卷 *.CAB 存檔中提取內容列表的命令列示例:

Extract.exe /A /D E:\Win95\OSR2.PE\Win95_21.cab > C:\Temp\List.txt

其中

E:\Win95\OSR2.PE\ – Windows-95 版本中一個 *.CAB 存檔的路徑示例。隱含地認為同一個存檔的其他卷存在於同一個目錄中。如果省略路徑,則僅在當前目錄中搜索存檔。
/D 一個選項,規定在不解壓縮存檔卷的情況下顯示內容表。
/A 一個選項,規定對同一個存檔的所有後續卷應用相同的操作。在本例中,它會導致處理從第 22 捲到第 26 卷的 CAB 存檔卷。

由於 *.CAB 存檔包含大量檔案,因此很難從滾動的螢幕上感知其長內容表。這就是為什麼在顯示的示例中,輸出被重定向到檔案 List.txt 中,可以使用檢視器(6.19)或編輯器程式(6.09)更方便地分析該檔案。

以下是從多卷存檔中提取單個檔案的另一個 EXTRACT.EXE 使用示例,當預先不知道哪個特定捲包含所需檔案時:

Extract.exe /A /Y /L C:\Windows\System Win95_02.cab Msvcrt40.dll

其中

/Y 一個選項,指示覆蓋目標目錄中任何同名的檔案,無需提示。
/L 一個選項,指示將後續專案 (C:\Windows\System) 解釋為解壓的目標路徑。當省略 /L 引數時,解壓的預設目標為當前目錄。
Msvcrt40.dll – 要解壓的檔案的檔名示例(可能指定多個要解壓的檔名)。

在所示示例中,第一個指定的檔名 (Win95_02.cab) 被解釋為該存檔卷的名稱,從中開始搜尋所需的檔案。所有後續檔名都被解釋為要提取和解壓縮的檔案的名稱。執行所示命令列將啟動從 02 到 26 的卷的搜尋過程,以查詢指定的檔案。實際上,它將在第 13 個卷中找到並解壓到 C:\WINDOWS\SYSTEM 目錄,覆蓋那裡已損壞的相同檔案的樣本。此類過程比軟體版本的完全解壓快得多。

EXTRACT.EXE 不允許在檔名中使用萬用字元 (2.01-03),但接受一個可選引數 /E,該引數強制解壓指定 CAB 檔案的所有內容。在這種情況下,不應指定要解壓的檔案的特定名稱。/E 引數適用於從 Windows-2000/XP 版本中解壓非櫃式壓縮檔案(那些在後綴末尾帶有下劃線的檔案)。但在 DOS 中完全解壓大型 *.CAB 檔案需要花費太多時間。/A 和 /E 引數的組合需要特別注意,因為它可能會啟動一個過程,該過程將花費數小時的時間和大量的磁碟空間。

注意
  1. 一些軟體供應商提供的 *.CAB 存檔是由其他壓縮演算法生成的。除此之外,還知道幾個相互不相容的 EXTRACT.EXE 版本。對於任何給定的軟體版本,最合適的解壓程式是該版本中提供的那個。

6.12 FC.EXE – 檔案比較實用程式

[編輯 | 編輯原始碼]

FC.EXE 實用程式可以比較兩個檔案,無論是二進位制檔案還是文字檔案。二進位制比較適用於查詢幾乎相同的二進位制檔案中已更改的位元組:FC.EXE 顯示每對不匹配位元組的位元組號以及這些位元組本身,分別取自每個比較檔案。以下是在執行二進位制比較的命令列示例

Fc.exe /B Trial2.com D:\Temp\Trial1.com

其中

/B 一個選項,指示二進位制比較。
Trial2.com – 要比較的第一個檔案的示例;由於其名稱前面沒有路徑,因此隱含地存在於當前目錄中。
D:\Temp\Trial1.com – 帶有前導路徑的第二個檔案的名稱示例。

二進位制比較並不意味著在位元組的相互偏移序列中搜索匹配。

文字比較基於文字檔案的行結構。FC.EXE 逐行比較文字檔案並並排顯示不匹配的行。當行序列之間的對應順序被打亂時,FC.EXE 可以透過搜尋下一組匹配的行來恢復它。比較和搜尋條件均由命令列中的選項指定,例如

Fc.exe /A /C /L /LB9 /N /T /W /1 A:\Config.sys C:\Config.sys

其中

/A 僅顯示每組不匹配行中的 2 行(第一行和最後一行)。
/C 忽略字母的大小寫(對於 ASCII 程式碼高達 127)。
/L ASCII 文字比較的規定。
/LB9 匹配搜尋區域的限制示例(9 個連續的不匹配行);預設為 100 行。
/N 指示顯示行號的規定。
/T 指示避免將製表符程式碼 (09h) 擴充套件為空格的規定。
/W 指示忽略空格(製表符程式碼和空格)的規定。
/1 一組不匹配行後必須匹配的連續行的數字示例。
注意

對於具有 BIN、COM、EXE、LIB、OBJ、SYS 字尾的檔案,二進位制比較是預設值。其他檔案預設為文字比較。

  1. 在特殊應用程式中,要比較的檔案之一(或兩者)可以用其他來源 (2.01-01) 替換,例如,虛擬裝置 NUL 或 CON 裝置 – 控制檯。後者可以執行與鍵盤輸入的比較 (1.04)。

6.13 FDISK.EXE – HDD 分割槽工具

[編輯 | 編輯原始碼]

磁碟,以其字母名稱識別,是邏輯磁碟。與之相反,物理硬碟儲存裝置沒有字母名稱。物理儲存裝置中的可寫儲存空間可以劃分為多個分割槽,每個分割槽可以表示一個單獨的邏輯磁碟。FDISK.EXE 實用程式是專有的 MS-DOS 7 的工具,用於安排物理 HDD(硬碟驅動器)中的分割槽結構。

在沒有引數的情況下啟動時,FDISK.EXE 會詢問使用者是否應提供大磁碟支援。拒絕此提議意味著 512–2048 Mb 範圍內的分割槽將為 FAT-16 型別,否則將首選 FAT-32 型別。對於超出上述範圍的分割槽,預設分配 FAT 系統:對於大於 2048 Mb 的分割槽為 FAT-32,對於 512 到 16 Mb 之間的分割槽為 FAT-16,對於 16 Mb 及更小的卷為 FAT-12。

那些傾向於信任自己的人可以指定命令列引數,從而擺脫不必要的疑問和限制

Fdisk.exe /fprmt /actok

/fprmt 引數取消有關大磁碟支援的查詢,並將檔案系統選擇的所有許可權賦予使用者。/actok 引數可以安排任何物理硬碟驅動器中的活動分割槽(否則只能在第一個物理 HDD 中安排活動分割槽)。以所示方式啟動時,FDISK.EXE 將顯示一個選單以選擇操作:顯示當前分割槽結構、刪除或建立分割槽或將其設為活動狀態。使用者可以建立分割槽結構,但後者不會立即寫入磁碟。FDISK.EXE 提供機會更正它。如果分割槽應該可引導,請不要忘記將其設為活動狀態。然後您可以退出 FDISK.EXE。

如果分割槽結構已更改,FDISK.EXE 會將其寫入磁碟並退出到重新啟動,因為建立的分割槽必須由 BIOS 註冊。PC 的 BIOS 系統將字母名稱分配給註冊的分割槽。從那時起,所有註冊的分割槽都成為 DOS 中可見的邏輯磁碟,但新的邏輯磁碟尚未格式化,因此無法訪問。新的邏輯磁碟在透過 FORMAT.COM 實用程式 (6.15) 格式化後變得可訪問。

除了互動式安排分割槽結構之外,FDISK.EXE 還可以用作具有以下選項的普通控制檯實用程式

Fdisk.exe /? 顯示簡短幫助。
Fdisk.exe /status 顯示可用的物理 HDD 和邏輯磁碟的分配。
Fdisk.exe /mbr 在第一個 HDD 上寫入或重寫 MBR(主引導記錄),同時保持其分割槽表不變。[註釋 1] 不顯示確認訊息。
Fdisk.exe /cmbr 2 作用與 /mbr 相同,但允許透過物理編號指定目標 HDD:如果這些 HDD 存在,則允許 1、2、3 及以上。不顯示確認訊息。

無論 FDISK.EXE 使用的目的如何,其命令列都可以補充 /X 選項,該選項強制避免擴充套件磁碟訪問的支援功能。當普通使用嘗試失敗時,應記住 /X 選項:HDD 未被識別、被發現無法訪問或 PC 出現“堆疊溢位”訊息而掛起。這些結果可能是由於配置錯誤、硬體故障或病毒 MBR 感染造成的。不一定,但在某些此類情況下,/X 選項可能會有所幫助。

如果應該在幾個新的 HDD 上形成相同的分割槽結構,那麼應該首選自動(非互動式)安排分割槽。可以透過以下命令列示例初始化將分割槽結構自動寫入 HDD

Fdisk.exe 1 /PRI:2000 /EXT:8000 /LOG:8000 /Q

其中

1 目標物理 HDD 編號 (1、2、…)。
/PRI:2000 – 安排主分割槽,例如 2000 Mb。如果應在此分割槽中形成 FAT-16 檔案系統,則應指定 /PRIO: 引數(而不是 /PRI:)。
/EXT:8000 – 安排擴充套件分割槽,例如 8000 Mb。
/LOG:8000 – 在擴充套件分割槽內安排邏輯磁碟,例如 8000 Mb。對於不超過 2000 Mb 的大小,引數 /LOGO:(而不是 /LOG:)表示應形成 FAT-16 檔案系統。
/Q “靜默”選項,即在沒有螢幕訊息的情況下執行。

成功完成其工作後,FDISK.EXE 將初始化重新啟動。

注意
  1. ^ 重寫 MBR 可以消除 MBR 錯誤,包括病毒造成的錯誤。但是,某些 BIOS 擴充套件和引導管理器使用非標準型別的 MBR,FDISK.EXE 無法恢復這些 MBR。在這種情況下,應首選其他 MBR 恢復方法(例如,在 9.02-03 中)。
  2. Microsoft 的 FDISK.EXE 不支援分割槽的非順序放置,因此無法繞過物理磁碟表面磨損的區域。FDISK.EXE 無法正確安排那些跨越物理磁碟空間 8.4 Gb 邊界的分割槽。FDISK.EXE 經常無法正確處理由其他作業系統安排的分割槽:要麼無法刪除此類分割槽,要麼可能會安排新的分割槽,覆蓋以前的分割槽。
  3. 原始 Microsoft FDISK.EXE 最重要的缺點已在其新的非官方版本(2006 年釋出)中得到糾正,該版本可以從網站 http://radified.com/Files/FDISK.EXE 下載。除此之外,Brian E. Reifsnyder 還編譯了完全新的同名實用程式。此實用程式的 1.30 版本(2003 年釋出),打包在 fdisk130.zip 存檔中,可以從伺服器 ftp://ftp.uni-koeln.de/pc/msdos/diskutils/ 下載
  4. FDISK.EXE 執行的任何現有分割槽結構更改都會導致受影響分割槽中的所有資料丟失。可以使用更強大的工具(例如 PowerQuest 的 Partition Magic 實用程式(現已由 Symantec Co. 收購))來執行不丟失資料的分割槽重新排列。
  5. FDISK.EXE 無法安排透過網路訪問或由驅動程式控制的 HDD 中的分割槽。由於後一個原因,FDISK.EXE 通常無法處理具有 SCSI 或 USB 介面的外部儲存裝置。在這種情況下,其他實用程式可能適用,例如 BTFDISK.EXE(來自 Buslogic)或 TFDISK.EXE(來自 TEKRAM)。包含 TFDISK.EXE 的存檔 DC390FBW.ZIP 可以在網際網路網站 http://www.neuron.alt.ru/drivers/Driver/Controllers/ 的 TEKRAM 子目錄中找到。包含 BTFDISK.EXE 的 SFX 存檔 DOSASPI.EXE 位於同一網站的 BUSLOGIC 子目錄中。

6.14 FIND.EXE – 單詞(s)搜尋過濾器

[編輯 | 編輯原始碼]

FIND.EXE 實用程式充當文字資料的過濾器:它從檔案或透過重定向接收文字行,選擇包含或不包含特定字元組合的行,並將選定的行傳送到標準輸出通道 (STDOUT),預設情況下在螢幕上顯示。以下是用單詞(串)過濾器搜尋包含指定字元字串的行的一個示例

Find /N /I " INT 13 " C:\DOS\SRV\Drives.txt

其中

/N 一個選項,規定在顯示的行後面附上它們的行號。
/I 一個選項,規定忽略指定字元字串中字母的大小寫。
" INT 13 " – 要搜尋的字元字串示例,用雙引號括起來。請注意單詞之間的空格以及每個相鄰的雙引號 - 這保證了查詢整個單詞,而不是其他單詞的一部分。
C:\DOS\SRV\Drives.txt – 要分析的檔案示例(帶前導路徑)。如果未指定路徑,則表示該檔案存在於當前目錄中。一行中可以逐個或透過萬用字元指定多個檔名 (2.01-03)。

顯示的命令列示例將在螢幕上顯示分析檔案的所有行,這些行包含單詞 INT 13,以及一條簡短的訊息,提醒已分析了哪個檔案。行將以它們的編號開頭顯示:這將幫助您在以後編輯同一檔案時找到它們。如果您預計顯示的列表可能過長,您可以將輸出傳送到檔案 (2.04-03) 或傳送到檢視器 MORE.COM (6.19)。

FIND.EXE 完成搜尋後,如果至少找到一次指定的字元字串,則返回錯誤級別 0,否則如果在分析的文字中未找到該字串,則返回錯誤級別 1。可以使用錯誤級別來確定搜尋結果(請參閱文章 3.15-03 和 6.03)。

下一個不太典型的示例顯示了 FIND.EXE 如何計算文字檔案中的行數

Find.exe /V /C "" < Draft.txt

其中

/V 一個選項,規定顯示所有不包含指定字串的行。
/C 一個選項,規定僅顯示滿足指定條件的行數。
"" 要搜尋的字串的空規範。
< Draft.txt – 要分析的檔案示例,透過輸入重定向 (2.04-02) 傳送。由於檔名前面沒有路徑,因此表示該檔案存在於當前目錄中。透過重定向獲取輸入後,FIND.EXE 不會將其提醒訊息新增到顯示結果中。

FIND.EXE 將要搜尋的空字串視為一個特殊的非現有物件。因此,FIND.EXE 將簡單地計算所有行,包括空行。計算行數後,FIND.EXE 始終返回錯誤級別 0。

第三個用法示例顯示了批處理檔案中的行。假設目標路徑作為環境變數 %P% 的值給出,並且不知道它是否具有尾隨反斜槓。由於 DOS 對尾隨反斜槓的存在與否並不無所謂,因此如果尚未指定,則需要追加它。這可以透過以下方式完成

echo %P%\\ | Find.exe "\\\" > nul
if errorlevel 1 set P=%P%\

在第一行中,FIND.EXE 分析 ECHO 命令的重定向輸出,並嘗試查詢指定的符號組合,如果給定的路徑包含尾隨反斜槓,則該組合將存在於其中。FIND.EXE 的 STDOUT 輸出沒有意義,併發送到 NUL(無處)。結果透過 FIND.EXE 遺留的錯誤級別值得知。它在所示示例的第二行中進行了分析。錯誤級別 1 表示 FIND.EXE 在給定的路徑中沒有找到尾隨反斜槓,然後 SET 命令 (3.26) 將追加丟失的反斜槓。

最後一個(第四個)用法示例也是批處理檔案的一部分。假設您已激活了一個過程,該過程準備了一個要打包到存檔中的檔案列表(%Temp%\Files.lst),並且希望防止重複打包,當此列表除了同類存檔(例如 RAR)之外不包含任何其他內容時。這可以透過以下命令列實現

Find /C /I /V ".rar" < %Temp%\Files.lst | Find ": 0" > nul
if not errorlevel 1 echo Chosen file(s) – already RAR-archive(s)
if not errorlevel 1 goto NO_PACK

在第一行中,FIND.EXE 的最左側呼叫透過輸入重定向逐行從列表中讀取檔名,並且僅計算那些不包含以“.RAR”為字尾的檔名的行。計數結果透過 STDOUT 重定向到 FIND.EXE 的第二個(最右側)呼叫,該呼叫正在“等待”零計數。當計數結果確實為零(即除了 RAR 存檔之外沒有其他檔案)時,FIND.EXE 的最右側呼叫會留下錯誤級別 0。此錯誤級別值在示例的第二行和第三行中進行檢查。第二行顯示錯誤訊息,第三行執行跳轉到標籤“NO_PACK”,從而能夠繞過打包操作。

6.15 FORMAT.COM – 磁碟格式化工具

[編輯 | 編輯原始碼]

FORMAT.COM 實用程式在儲存介質上組織邏輯磁碟,包括磁碟和硬碟分割槽。格式化包括測試每個扇區的可讀性、寫入扇區標頭、建立引導扇區、檔案分配表 (FAT) 和根目錄。發現有不可讀扇區的簇在 FAT 中被標記為“壞”,因此不再使用。16 Mb 及以下的磁碟使用 FAT-12 檔案系統進行格式化。硬碟分割槽的 FAT 型別(FAT-16 或 FAT-32)的選擇取決於 FAT 型別識別符號 (A.13-6),該識別符號之前由 FDISK.EXE (6.13) 分配給特定分割槽。簇大小會自動計算為給定磁碟大小和 FAT 型別的允許最小值。

軟盤(磁碟)的格式化意味著磁軌的低階重新校準,因此磁碟的實際容量可能會發生變化。格式化磁碟的命令列示例可能如下所示

Format.com A: /V:Archives /Q /F:1.44 /B

其中

A 要格式化的磁碟的必需字母名稱規範。有效的字母名稱是在啟動時分配給磁碟的,當時磁碟由 BIOS 註冊。稍後透過軟體方式分配或更改的那些字母名稱被 FORMAT.COM 視為無效。
/V:Archives – 卷標的可選規範示例:最多 11 個字元的任意單詞。如果省略此選項,FORMAT.COM 會在格式化過程的最後階段提示您指定卷標。使用者可以拒絕此提議並按 ENTER 鍵;然後此邏輯磁碟將被賦予 NO_NAME 標籤。
/Q “快速格式化” – 一個選項,規定跳過大多數耗時的操作:扇區測試和標頭寫入。使用“Q”選項進行格式化用於刪除那些已格式化並且扇區標頭和扇區本身狀況良好的磁碟的所有內容。如果對此有任何疑問,則不建議進行快速格式化。
/F:1.44 可選大小規範(僅限軟盤)。允許的大小為:160、180、320、360、720(kb)和 1.2、1.44、2.88(Mb)。您可以使用其他形式的大小規範代替/F 選項,如下所示註釋 1。當未指定任何允許的大小選項時,FORMAT.COM 能夠根據 BIOS 的 CMOS 設定和驅動器的感測器訊號確定合適的大小。
/B 一個選項,規定保留系統檔案空間以便稍後使磁碟可引導。您可以使用 /S 代替 /B,這意味著相同的功能以及將 DOS 的系統檔案複製到格式化磁碟的根目錄中。系統檔案 (COMMAND.COM、IO.SYS) 隱含存在於 PC 主引導磁碟的根目錄中。與其他系統檔案相反,MSDOS.SYS 不會被複制:FORMAT.COM 會重新建立一個此檔案的空示例。

現代硬碟驅動器具有固定的磁軌結構。格式化過程無法更改它。因此,不應為格式化 HDD 分割槽指定磁碟大小、扇區數和其他類似的格式引數,例如

Format.com D: /s /c /z:64

其中

/c 一個選項,規定測試當前標記為“壞”的簇。有時這可以恢復那些在第一個磁軌中標記了“壞”扇區的磁碟和磁碟。但是,測試大量壞簇可能會大大增加格式化所需的時間。
/z:64 一個選項,強制安排 32 kb 簇,每個簇包含 64 個扇區。如果您打算稍後擴充套件此分割槽,則可能需要這樣做。/z:1 選項可以在小型磁碟(4 到 16 Mb)上安排 FAT-16 檔案系統。但是,大多數情況下省略“/z:”規範,因為預設簇大小被認為是最佳的。
注意
  1. 您可以指定每磁軌磁軌的數量和扇區的數量,而不是軟盤的總大小,例如 /T:80 /N:18/F 的另一個替代方法是使用以下方法
    /1 – 格式化過時的單面磁碟;
    /4 – 在 1.2 Mb 5.25 英寸驅動器中格式化 360 kb 軟盤;
    /8 – 每磁軌格式化 8 個扇區。
  2. 來自 Microsoft 的原始 FORMAT.COM(1998 年釋出)無法正確處理 64 Gb 以上分割槽的格式化。已更正版本(2006 年釋出),打包到 SFX 存檔 FDSKFRMT.EXE 中,可以從http://www.mdgx.com/files/FDSKFRMT.EXE 下載。

6.16 LABEL.EXE – 卷標更改工具

[編輯 | 編輯原始碼]

卷標是一個最多11個字元的單詞或片語,用作儲存介質的識別符號。卷標寫入引導扇區(A.03-4),此外還寫入根目錄的一個隱藏條目。大多數情況下,卷標是在格式化過程中指定的,但也可以透過例如 LABEL.EXE 實用程式稍後分配或更改。

Label.exe R:RAMDRIVE

其中

R 一個磁碟規格示例,該磁碟應更改其卷標;如果未指定磁碟,則預設情況下使用當前磁碟。
RAMDRIVE – 要分配給指定磁碟的卷標示例。

如果省略卷標,LABEL.EXE 將顯示指定磁碟的當前卷標並提供輸入新卷標的選項。新卷標規範也可以透過重定向來接受(2.04-02,2.04-05)。如果使用者拒絕該選項,則會提示使用者刪除(或保留)當前卷標。

LABEL.EXE 實用程式完成其工作後,將留下以下錯誤級別值

082 – 卷標寫入嘗試失敗。
015 – 無效的磁碟機代號名稱,沒有相應的驅動器。
002 – 驅動器內部沒有可移動儲存介質。
000 – 磁碟可訪問或未格式化。無論如何,都沒有嘗試寫入卷標。

返回的錯誤級別值可以像文章 3.15-03 和 6.03 中所示的那樣確定。由於返回的錯誤級別值具有資訊性,因此 LABEL.EXE 實用程式有時用於測試磁碟的可訪問性(文章 9.03-02 中的示例)。

6.17 MEM.EXE – 記憶體分配瀏覽器

[編輯 | 編輯原始碼]

呼叫 MEM.EXE 實用程式以顯示有關可用記憶體量、記憶體分配、已載入的駐留模組的資訊,例如

Mem.exe /A /C /P

其中選項為

/A 附加有關 HMA 區域中可用空間的資料的摘要。
/C 顯示記憶體使用情況的摘要表。此表的第一列列出駐留模組的名稱,其餘列列出記憶體分配的詳細資訊。代替/C選項,可以指定
/D – 顯示駐留模組和驅動程式的狀態;
/F – 僅顯示可用記憶體量;
/M:HIMEM – 顯示有關特定駐留模組(本例中為 HIMEM)的詳細資訊。其名稱在/M選項後指定,必須用冒號分隔。模組名稱應取自摘要表的第一列。
/P 在每屏資訊之後暫停。

6.18 MODE.COM – 外設介面調整器

[編輯 | 編輯原始碼]

MODE.COM 實用程式為埠、影片卡和字元生成器實現了許多介面配置功能。當 MODE.COM 實用程式使用/STATUS選項呼叫時,它將顯示當前從屬裝置設定的摘要表。

Mode.com /STATUS

6.18-01 MODE.COM:埠調整操作

[編輯 | 編輯原始碼]

MODE.COM 對序列埠(COM1、COM2、COM3、COM4)執行介面調整操作,如下例所示:

Mode.com COM1:11,E,8,2,B

其中

11 設定波特率為 110;允許的值為 11、15、30、60、12、24、48、96、19,分別對應于波特率 110、150、300、600、1200、2400、4800、9600 和 19200。
E 實現偶校驗;您可以指定
O 實現奇校驗;
N 無校驗。
8 設定每個碼字 8 個資訊位(允許 8 或 7)。
2 設定停止位數(允許 1 或 2)。
B 表示對埠錯誤的正常反應。代替B,可以指定
E 如果連線的裝置繁忙,則返回 ERROR 訊息;
N 錯誤發生後,不要重複呼叫埠;
P 重複呼叫埠,直到按下 CTRL-BREAK 鍵;
R 即使連線的裝置未完成其先前的工作,也強制切換到新工作。

並行埠(LPT1、LPT2、LPT3)的介面調整操作意味著連線的裝置是印表機。因此,對於並行埠,MODE.COM 實用程式接受其他引數,例如

Mode.com LPT1:80,6,B

其中

80 每行字元數(允許 80 或 132);
6 每英寸行數(允許 6 或 8),
B 表示對印表機錯誤的正常反應。代替B,可以指定與上一個示例中序列埠相同的選項。

MODE.COM 實用程式可以將來自並行埠(LPT1LPT3)的訊息重新定址到任何序列埠(COM1COM4),從而能夠使用具有序列介面的印表機。

Mode LPT1:=COM2

為了取消重新定址,應在相同並行埠名稱後再次呼叫 MODE.COM 實用程式,而無需其他規範。

Mode.com LPT1:

6.18-02 MODE.COM:文字影片模式切換

[編輯 | 編輯原始碼]

MODE.COM 實用程式允許兩種形式的命令來切換文字影片模式(A.10-1)。以下是一個最舊的命令形式的示例:

Mode.com co80

其中

co80 表示每行 80 個字元的彩色影片模式。代替co80,可以指定
bw40 單色影片模式,每行 40 個字元;
bw80 單色影片模式,每行 80 個字元;
co40 彩色影片模式,每行 40 個字元。

切換文字影片模式的第二種命令形式如下所示:

Mode.com 80,25

其中

80 每行字元數(允許 40 或 80);
25 每屏高度的行數(允許 25、43 或 50)。
注意
  1. 切換文字影片模式會伴隨著重新載入字型。如果當前字型由其他程式(除 MODE.COM 外)安裝,則 MODE.COM 更改影片模式可能會導致從國家字型返回到預設的美國字型內碼表 437。

6.18-03 MODE.COM:內碼表選擇

[編輯 | 編輯原始碼]

MODE.COM 實用程式執行的內碼表準備和選擇操作命令通常寫入 AUTOEXEC.BAT 檔案(9.01-02)。所有這些操作都需要載入 DISPLAY.SYS 驅動程式(5.02-02)。這些操作中的第一個是為進一步啟用準備多個內碼表。

Mode.com CON CP PREP=((437,850,866) EGA3.CPI)

其中

CON 是此操作所針對的裝置的規範。代替CON(控制檯,即鍵盤和顯示器),可以指定埠LPT1LPT2PRN(印表機)。
CP PREP “內碼表準備”操作的縮寫名稱。
(437,850,866) – 要準備的內碼表編號(A.02-2)。只有這些內碼表可透過 CHCP 命令(3.04)進行切換。
EGA3.CPI 包含所有應準備的內碼表的檔名的示例。

然後,應透過選擇操作啟用準備好的內碼表之一。

Mode.com CON CP SEL=866

其中

CP SEL “內碼表選擇”操作的縮寫名稱。
866 要啟用的內碼表編號示例。

為 CON(控制檯)裝置啟用的內碼表定義螢幕上字母和符號的視覺表示。為了確定當前為特定輸出裝置激活了哪個內碼表,您應使用裝置規範(CONPRNLPT1LPT2)、CP(內碼表)操作名稱和/STATUS選項呼叫 MODE.COM 實用程式。

Mode.com CON CP /STATUS

任何載入的內碼表都可能因故障或其他軟體的不當操作而損壞。在這種情況下,MODE.COM 實用程式允許使用以下命令重新載入活動內碼表:

Mode.com CON CP REF

其中

CP REF “內碼表重新整理”操作的縮寫名稱。

6.19 MORE.COM – 分頁檢視器

[編輯 | 編輯原始碼]

當長訊息作為整體傳送到顯示器時,文字在螢幕上滾動得太快而無法感知。為了使長訊息可讀,MORE.COM 檢視器以分頁方式將它們傳送到顯示器。每次螢幕充滿文字時,MORE.COM 檢視器都會暫停輸出,以便使用者閱讀文字。使用者的每次擊鍵都會啟動下一文字頁的顯示。

MORE.COM 檢視器透過輸入重定向(2.04-02)攔截髮送到標準輸出通道(STDOUT)的訊息。

More.com < D:\MyDocs\Part2.txt

或透過中間重定向(2.04-05)。

Type D:\MyDocs\Part2.txt | More.com

其中

D:\MyDocs\Part2.txt – 是要顯示的檔名的示例,前面是完整路徑。如果省略路徑,則表示該檔案存在於當前目錄中。
Type D:\MyDocs\Part2.txt – 是傳送其輸出透過 STDOUT 輸出通道的命令(3.30)的示例。可以指定任何其他將輸出傳送到 STDOUT 的命令。
注意
  1. 透過 BIOS 中斷或透過 STDERR 輸出通道傳送到顯示器的訊息無法被 MORE.COM 攔截。
  2. 當 MORE.COM 檢視器透過中間重定向(2.04-05)接受訊息時,該訊息將寫入臨時檔案,並且需要訪問可寫介質。如果當前磁碟不可寫或防寫,並且環境變數 %TEMP% 中未定義可寫介質的路徑,則 MORE.COM 檢視器無法執行此任務。因此,應優先選擇透過輸入重定向進行攔截。

6.20 MOVE.EXE – 複製和重新命名實用程式

[編輯 | 編輯原始碼]

MOVE.EXE 實用程式用於重新命名目錄並將檔案從一個目錄移動到另一個目錄。

當源目錄和目標目錄屬於不同的邏輯磁碟時,移動等同於複製,然後刪除源目錄中複製的檔案。但當源目錄和目標目錄都屬於同一邏輯磁碟時,可以透過重新排列目錄條目來更快地執行移動:檔案第一個簇的引用記錄從一個目錄表移動到另一個目錄表,而無需觸及檔案本身。MOVE.EXE 實用程式能夠確定在每種特定情況下應採用哪種移動方式。

檔案移動可以伴隨著重新命名。目錄的重新命名也是透過更正父目錄表中的條目來執行的。

以下是一個 MOVE.EXE 用法示例,用於將檔案從一個目錄移動到另一個目錄

Move.exe /Y D:\MyDocs\Part*.txt C:\Dos\Chap*.txt

其中

/Y 一個選項,用於在不提示的情況下覆蓋目標目錄中的同名檔案。當命令列中不存在此選項時,MOVE.EXE 會嘗試在 COPYCMD 環境變數的值中查詢它。如果 COPYCMD 值包含此選項,則可以透過在命令列中指定相反的 /-Y 選項來克服它的作用。
D:\MyDocs\Part*.txt – 帶有前導路徑的原始檔規範示例。如果檔案位於當前目錄中,則可以省略路徑。一個命令列中可以有多個源規範。
C:\Dos\Chap*.txt – 目標規範示例,包括用於將要移動的檔案重新命名的掩碼。命令列中所有此類規範中的最後一個被解釋為目標目錄規範。如果此規範中的最後一個名稱不是現有物件的名稱,則將此新名稱分配給移動的檔案。但當目標規範中的最後一個名稱是現有目錄的名稱時,檔案將移動到該目錄中,而不會重新命名。

為了重新命名目錄,源規範中的最後一個名稱不能是掩碼或檔名,而必須是現有目錄的名稱。在這種情況下,目標規範必須僅包含新名稱,而無需路徑,即使要重新命名的目錄不是當前目錄中的子目錄。

6.21 SCANDISK.EXE – 磁碟修復工具

[編輯 | 編輯原始碼]

SCANDISK.EXE 是一個用於檢查和修復軟盤和硬碟驅動器的程式,這些驅動器使用 FAT12、FAT16 或 FAT32 檔案系統格式化。SCANDISK.EXE 檢查引導扇區,發現丟失的簇,更正 FAT 表中的交叉連結,檢查每個簇中磁碟表面的可寫性。不可讀的簇在 FAT 中標記為 BAD,因此不再使用。測試過程和壞簇的位置顯示在圖表中,如下面的圖 4 所示。

圖 4

SCANDISK.EXE 嘗試將壞簇中的資訊重寫到好的簇中,以恢復每個檔案的完整性。定期啟動 SCANDISK 的維護程式可以使您的計算機長時間保持良好的執行狀態。

測試結構的詳細資訊由儲存在單獨檔案 SCANDISK.INI 中的引數定義,該檔案必須與主 SCANDISK.EXE 檔案位於同一目錄中。SCANDISK.INI 是一個文字檔案。它包含全面的註釋,並且可以由使用者編輯。如果您必須根據 SCANDISK.INI 中的所有引數檢查和修復驅動器,則必須在命令列中使用 /CUSTOM 選項啟動 SCANDISK.EXE。如果未指定 /CUSTOM 選項,則只會考慮 SCANDISK.INI 檔案的 [ENVIRONMENT] 部分中的引數。

命令列中的引數優先於 SCANDISK.INI 檔案中指定的引數。SCANDISK.EXE 能夠自動修復它發現的大部分錯誤,但為此它必須在命令列中使用引數啟動,例如

Scandisk.exe C: /AUTOFIX /NOSAVE /NOSUMMARY /SURFACE

其中

C 要檢查的磁碟的規範示例。如果您希望處理所有可訪問的磁碟,則應指定 /ALL 而不是特定的磁碟機代號名稱。壓縮磁碟應使用其卷名指定,例如:C:\DRVSPACE.000
/AUTOFIX 在不提示的情況下修復錯誤。相反,當不需要自動修復時,可以指定 /CHECKONLY 選項而不是 /AUTOFIX
/NOSAVE 刪除丟失的簇,而不是將其另存為檔案。此選項僅在也指定了 /AUTOFIX 選項時才能使用。預設情況下,丟失的簇會被轉換為同一磁碟根目錄下的 *.CHK 檔案。
/NOSUMMARY – 不要在摘要螢幕處停止。此選項可以與 /CHECKONLY/AUTOFIX 選項一起使用。
/SURFACE 在其他檢查後執行表面掃描(表面掃描不應應用於壓縮磁碟)。

如果未指定 /AUTOFIX 選項,則在進行任何更改之前,SCANDISK.EXE 會提示您將磁碟的當前狀態寫入 UNDO 磁碟。這提供了以後恢復當前磁碟狀態的機會,如果修復導致出現錯誤。在做出有關 UNDO 磁碟的決定時,應考慮到當前狀態記錄中的資料量可能非常大。現代硬碟的大分割槽可能需要數百張 UNDO 磁碟和大量時間。因此,SCANDISK 關於 UNDO 磁碟的提示很可能應該被拒絕。

如果仍然在 UNDO 磁碟中儲存了原始磁碟的狀態,並且發現需要恢復此狀態,則必須立即執行恢復過程,然後再將任何新檔案寫入此磁碟

Scandisk.exe /UNDO B:

其中

/UNDO 啟動恢復過程的引數。
B 將用於讀取 UNDO 磁碟的驅動器的規範示例。

SCANDISK.EXE 執行的另一個操作是探測特定檔案是否已碎片化

Scandisk.exe /FRAGMENT C:\WINDOWS\SYSTEM\Kernel32.dll

其中

/FRAGMENT – 用於誘導檔案碎片化探測的選項。
C:\WINDOWS\SYSTEM\KERNEL32.DLL – 要探測的檔案的規範示例。如果省略路徑,則只會在此檔案的當前目錄中搜索。

無論執行何種操作,SCANDISK.EXE 都從命令列接受另一個選項 – /MONO 選項,該選項用於將輸出配置為單色顯示(預設情況下,輸出訊息以彩色顯示)。

注意
  1. SCANDISK 的過程不能應用於網路驅動器、CD/DVD-ROM、RAM 磁碟以及由 ASSIGN.COM、JOIN.EXE 和 SUBST.EXE 實用程式建立的虛擬磁碟。SCANDISK.EXE 也無法處理導致磁碟資料無法訪問的損壞。但是,引導扇區損壞的無法訪問的磁碟有時可以使用 Symantec Co. 的 NDD.EXE 或 DISKEDIT.EXE 實用程式恢復。
  2. SCANDISK.EXE 需要直接訪問處理的磁碟,因此不能在多工環境中使用。在 WINDOWS 作業系統安排的 DOS “視窗”中呼叫 SCANDISK.EXE,實際上會呼叫另一個程式 – \WINDOWS 目錄中的 SCANDSKW.EXE。
  3. /AUTOFIX 選項的 SCANDISK.EXE 不應應用於懷疑感染了病毒的磁碟。這可能導致無法挽回的資料丟失。此類磁碟應首先由防病毒掃描程式處理(例如,由 DRWEB.EXE 處理)。
  4. 預設情況下,SCANDISK.EXE 將 Windows 作業系統指定的每個長檔名視為錯誤。嘗試修復所有此類錯誤可能會產生可怕的後果。如果 SCANDISK.INI 檔案的 [ENVIRONMENT] 部分包含以下行,則 SCANDISK.EXE 不會損壞長檔名
    LfnCheck = Off
    SpaceCheck = Off
    
    Windows ME 的 SCANDISK.EXE 改進版本對長檔名更寬容,可以在 MS-DOS 7 下使用。
  5. 除非同一磁碟上有一些空閒簇,否則無法執行將壞簇中的資料重寫到好簇中的操作。當然,您可以刪除任何檔案以獲得一些空閒空間,但有一些實用程式(例如,PKZIP.EXE 歸檔程式的 2.50 版本)會用單個檔案填充軟盤,不留任何空閒空間。由於一個損壞的扇區,這樣的檔案既無法讀取也無法修復,因為沒有備用扇區。應避免用一個檔案填充整個介質。

6.22 SORT.EXE – 行排序過濾器

[編輯 | 編輯原始碼]

SORT.EXE 實用程式從檔案或透過重定向接受文字行,並以另一種排序順序(透過 STDOUT 通道)傳送到螢幕(預設)、另一個檔案或裝置。排序由 ASCII 程式碼表中字元的順序定義。

以下示例顯示了 SORT.EXE 用法,用於在螢幕上顯示文字行的更改順序

Sort.exe /R /+12 D:\MyDocs\Unsort.txt

其中

/R 一個選項,用於反轉排序順序,即從 Z 到 A,然後從 9 到 0。
/+12 根據第 12 列中的字元對行進行排序的規範示例。如果省略此選項,則預設情況下將使用第 1 列中的字元。
D:\MyDocs\Unsort.txt – 要處理的檔案的規範示例(帶前導路徑)。沒有前導路徑的檔案將只在當前目錄中搜索。

第二個用法示例顯示了透過重定向從原始檔輸入,以及重定向到另一個(目標)檔案的輸出

Sort.exe /+9 < D:\MyDocs\Unsort.txt > D:\MyDocs\Sort.txt

其中

D:\MyDocs\Sort.txt – 目標檔案的規範示例。如果此檔案存在,它將被覆蓋,不會提示。不允許對源和目標都指定相同的檔案(資料將丟失!)。

最後一個示例顯示了透過另一個命令的中間重定向輸入,以及將排序後的行輸出到印表機

Type D:\MyDocs\Unsort.txt | Sort /+3 > PRN
注意
  1. 除非您確定印表機已正確連線到 LPT1 埠、已開啟並且能夠與 MS-DOS 協作,否則不應嘗試重定向到印表機。
  2. 輸出重定向(>)和透過“管道”(|)重定向都需要訪問可寫介質,並且如果未滿足此條件則無法執行(2.04-03 – 2.04-05)。

6.23 SUBST.EXE – 虛擬磁碟的安排

[編輯 | 編輯原始碼]

SUBST.EXE 實用程式用於安排虛擬磁碟,作為真實路徑的等效替換。最初,SUBST.EXE 被開發為一種讓舊程式(DOS 3.0 之前的版本)訪問子目錄的方法。早期的 DOS 版本“不知道”分層目錄結構,所有檔案都儲存在單個根目錄中。SUBST.EXE 實用程式允許像訪問磁碟根目錄一樣訪問任何子目錄中的檔案。如今,SUBST.EXE 實用程式很少使用,目的是為了將更多資料壓縮到較短的命令列和環境變數 %PATH% 中。

以下是使用 SUBST.EXE 安排虛擬磁碟的示例:

Subst.exe V: D:\DATA386\For_K\MyDocs

其中

V 虛擬磁碟要安排的磁碟機代號名稱示例。磁碟機代號名稱必須是空閒的(不屬於任何真實驅動器),並且必須在 CONFIG.SYS 檔案中 LASTDRIVE 命令(4.17、4.18)設定的限制範圍內選擇。
D:\DATA386\For_K\MyDocs – 要分配給虛擬磁碟的真實磁碟和路徑的示例。如果未指定路徑,則隱含當前磁碟和路徑。

為了刪除虛擬磁碟,帶有 SUBST.EXE 實用程式呼叫的命令列可能如下所示:

Subst V: /D

其中

V 要刪除的虛擬磁碟的磁碟機代號名稱示例。
/D 一個選項,指示刪除虛擬磁碟。

在沒有引數的情況下執行時,SUBST.EXE 實用程式會顯示當前活動虛擬磁碟的列表。

注意
  1. 由 SUBST.EXE 安排的虛擬磁碟不能被以下實用程式操作:Assign.com、Backup.exe、Chkdsk.exe、Defrag.exe、Diskcomp.com、Diskcopy.com、Fdisk.exe、Format.com、Label.exe、Mirror.exe、Recover.exe、Restore.exe、Scandisk.exe、Sys.com、Undelete.exe、Unformat.com。
  2. 分配給虛擬磁碟的路徑仍然可以透過常規方式訪問。
  3. Windows 作業系統可以接受虛擬磁碟,但不能在 Windows 作業系統載入後安排。如有必要,應在載入 WINDOWS 之前安排虛擬磁碟,最好透過從 AUTOEXEC.BAT 檔案的行啟動 SUBST.EXE 實用程式來安排。

6.24 SYS.COM – 使磁碟可啟動的實用程式

[編輯 | 編輯原始碼]

在 PC 啟動過程的某個階段,控制權會轉移到可執行程式碼,該程式碼從啟動磁碟的引導扇區讀取。反過來,此可執行程式碼將控制權轉移到引導扇區內指定的載入程式檔案。為了使磁碟能夠使用 MS-DOS 7 啟動,必須事先將相應的可執行程式碼和 MS-DOS 7 載入程式檔案 IO.SYS 的名稱寫入磁碟的引導扇區。此外,IO.SYS 載入程式本身以及命令直譯器 COMMAND.COM 和 MSDOS.SYS 檔案(5.01-01)必須存在於可啟動磁碟的根目錄中。這些可啟動條件由 SYS.COM 實用程式準備。

使磁碟可啟動的命令列可能如下所示:

Sys.com C:\ A:

其中

C:\ 包含這些系統檔案(IO.SYS 和 COMMAND.COM)的源目錄路徑示例,這些檔案應複製到新磁碟。如果省略源路徑,則將在用於啟動 PC 的磁碟的根目錄中搜索系統檔案。
A 要使其可啟動的磁碟的磁碟機代號名稱示例。它必須被 PC 的 BIOS 識別,並且必須在同一版本的 DOS 下格式化。
注意
  1. SYS.COM 實用程式不能應用於網路磁碟、CD/DVD-ROM 和由 RAM 磁碟驅動程式或 ASSIGN.COM、JOIN.EXE 和 SUBST.EXE 實用程式建立的虛擬磁碟。
  2. SYS.COM 實用程式執行的操作是必要的,但不足以使 HDD 分割槽可啟動。此分割槽必須由 FDISK.EXE(6.13)或其他類似程式在磁碟的 MBR 中標記為活動分割槽。引導扇區的可執行程式碼將僅從該單個活動分割槽讀取以執行。
  3. 與 IO.SYS 和 COMMAND.COM 系統檔案相反,MSDOS.SYS 檔案(5.01-01)不會被複制。SYS.COM 會重新建立一個空的。從具有預設設定的新磁碟載入被認為更安全,因為以前的設定在其他情況下可能不適用。
  4. 在 MS-DOS 的第 8 版中,SYS.COM 實用程式已更改:它始終使用預設路徑到源目錄,並且不能從命令列接受此路徑。

6.25 VC.COM – 檔案管理器

[編輯 | 編輯原始碼]

6.25-01 Volkov Commander Shell 的主要特性

[編輯 | 編輯原始碼]

由 Vsevolod V. Volkov(烏克蘭基輔)編寫的 Volkov Commander 檔案管理器 (VC) 類似於著名的 Norton Commander 檔案管理器,但 VC 更緊湊,並且更靈活地適應使用者的需求。雖然 VC 是一個未完成的專案,不能被認為非常好,但它是在 MS-DOS 7 下進行修復工作最舒適的選擇。VC 的 4.99.07 版本,打包在 vc499.zip 存檔中,可以從網際網路網站 http://www.fdd5-25.net/shells.php 下載。下面描述的只是 1998 年釋出的此版本。VC Shell 的最新 alpha 版本 4.99.08 釋出日期為 2000 年。此最新版本打包在 vc49908a.zip 存檔中,可以從網站 http://vvv.kiev.ua/download/ 下載。

VC.COM 本身不是檔案管理器,它只是一個啟動檔案。整個 VC 發行版包括主覆蓋層 VC.OVL、許多程式碼轉換表 *.TBL 以及以下配置檔案:

VC.INI – 具有通用配置設定的非文字檔案。
VC.MNU – 由 F2 鍵擊呼叫的選單的配置。
VC.EXT – 由 ENTER 鍵擊呼叫的字尾定義的服務。
VCARCH.EXT – 存檔服務的規範。
VCEDIT.EXT – 由 F4(編輯)鍵擊呼叫的字尾定義的服務。
VCVIEW.EXT – 由 F3(檢視)鍵擊呼叫的字尾定義的服務。

除了 VC.INI 之外,所有 VC 的配置檔案都是普通文字檔案,可以使用 EDIT.COM(6.09)或任何其他非格式化文字檔案編輯器進行編輯。一些 VC 配置檔案的示例顯示在文章 6.25-02 – 6.25-04 中。

所有 VC 發行版的檔案都必須儲存在一個目錄中,並且此目錄的路徑應作為環境變數 VC 的值分配。因此,檔案 AUTOEXEC.BAT 應包含一行,例如:

set VC=C:\DOS\VC4

VC Shell 可以從命令列作為普通程式啟動,但通常從 AUTOEXEC.BAT 檔案中的最後一行自動啟動,例如:

C:\DOS\VC4\Vc.com /TSR /no2E /noswap /nozoom

其中選項為

/TSR 啟用 TSR 監控程式,該監控程式監視所有後來載入的 TSR 模組並在 VC Shell 關閉時解除安裝它們。這可能有助於釋放記憶體,有時可以避免重新啟動 PC 的必要性。相反,當 TSR 監控程式不需要時,應改為指定 /noTSR 引數。
/no2E 排除透過未公開的 INT 2E 中斷(8.02-89)執行程式,為此目的使用合法的 INT 21\AX=4B00h(8.02-53)。INT 2E 更短更快,但不是可重入的,並且無法訪問呼叫者的區域性變數。如果仍然首選 INT 2E,則可以改為指定 /2E 引數。
/noswap 指示避免將 VC 的資料從記憶體交換到 HDD 上的檔案。VC 的資料交換基於 CHS 訪問,這與大型現代 HDD 不相容。相反,在過時的 PC 上,資料交換可能是可取的,然後可以指定相反的 /swap 選項。
/nozoom 不要縮放訊息視窗(縮放被採用為預設值)。

VC.COM 的其他允許選項是:

/BW 為單色顯示器設定黑白調色盤。/BW 的替代方案是 /LCD – 為 LCD 顯示器設定特殊調色盤。預設值為 16 色調色盤,這對於文字影片模式 03h(A.10-1)來說是典型的。
/std 將 VC 載入到常規記憶體中。預設情況下,VC Shell 優先選擇其他選項(如果有)。當 VC 將自身載入到常規記憶體中時,還可以指定
/big 載入整個 VC 的駐留模組;
/small 載入模組程式碼的一部分,需要從磁碟定期補充。
/XMS 指示將 VC 載入到 XMS 記憶體中,如果 XMS 記憶體管理器 HIMEM.SYS(5.04-01)已安裝。/XMS 選項的替代方案是:
/noXMS 避免使用 XMS 記憶體;
/EMS 如果 EMM386.EXE 記憶體管理器(5.04-02)已安裝,則優先使用 EMS 記憶體;
/noEMS 避免使用 EMS 記憶體。
/ini:Alter.ini – 使用另一個具有任意名稱的配置檔案(此示例中為 Alter.ini)代替 VC.INI。您可以重新命名當前 VC.INI 檔案,更改 VC 配置並按 Shift-F9“儲存設定”:VC 將被迫建立一個新的 VC.INI 檔案。因此,您可以將許多替代設定儲存在不同的 *.INI 檔案中。
/? 顯示簡短幫助。
圖 5

在命令列中的所有引數之後,VC.COM 允許指定一個命令,該命令應在啟動 VC Shell 本身後立即執行。例如,對於重新整理之前由 ESCAPE.COM 實用程式儲存的中斷表內容記錄,此機會可能很方便。

當 VC Shell 執行時,它在螢幕上的外觀可能不同,具體取決於儲存在 VC.INI 檔案中的初始設定。通常,目錄內容顯示在一個或兩個面板中,如圖 5 所示。

VC Shell 的主要功能可以透過“熱鍵”和滑鼠按鈕單擊來訪問。VC Shell 保持啟用的那些“熱鍵”按重要性遞減的順序列在下面。

Ctrl B 切換底部鍵欄的開啟/關閉狀態
F9 啟用頂部功能欄
Ctrl F1 切換左側面板的開啟/關閉狀態
Ctrl F2 切換右側面板的開啟/關閉狀態
Tab 切換活動左側面板/活動右側面板
Alt F1 允許在左側面板中選擇磁碟
Alt F2 允許在右側面板中選擇磁碟
Ctrl O 切換兩個面板的開啟/關閉狀態
Ctrl Q 切換非活動面板中快速檢視視窗的開啟/關閉狀態
Ctrl L 切換非活動面板中磁碟資訊的開啟/關閉狀態
Ctrl [ 將左側面板中的路徑輸入命令列
Ctrl ] 將右側面板中的路徑輸入命令列
Ctrl i 將所選檔案的名稱輸入命令列
Ctrl P 切換非活動面板的開啟/關閉狀態
Ctrl U 交換面板
箭頭 在活動面板中切換選單項或所選檔案
Home 將選擇移至當前目錄的開頭
End 將選擇移至當前目錄的結尾
F2 顯示使用者定義的選單(6.25-02)
F3 呼叫檢視器以讀取所選檔案
F4 呼叫文字編輯器(如果使用者已定義)
F5 將所選檔案或組複製到對面面板
Ctrl F5 與 F5 相同,但僅複製一個檔案,忽略組列表

F6 移動或重新命名選定的檔案或準備好的檔案組
Ctrl F6 與 F6 相同,但僅移動一個檔案,忽略檔案組列表
F7 啟用建立目錄的功能
F8 刪除選定的檔案或準備好的檔案組
Ctrl F8 與 F8 相同,但僅刪除一個檔案,忽略檔案組列表
Ins 將高亮顯示的專案新增到檔案組操作列表中
Shift F9 將當前 VC 的設定寫入 VC.INI 檔案
Ctrl A 顯示檔案屬性並啟用修改屬性的功能
Ctrl C 呼叫目錄比較,標記特有檔案
Ctrl E 將歷史記錄表中的最後一行移回命令列
Ctrl F 啟用使用掩碼定義選擇的字尾
Ctrl N 切換面板中檔案字尾的顯示
Ctrl R 重新讀取當前目錄的內容
Ctrl F4 啟用修改活動磁碟的卷標
Ctrl F9 更改顯示影片模式(Alt-F9 也可更改)
Ctrl \ 在活動面板中跳轉到磁碟根目錄
Alt-字母鍵 按名稱在當前目錄中搜索檔案
Alt F6 選定目錄的大小(在面板的“完整”模式下)
Alt F8 顯示以前的命令列(歷史記錄)
Alt F10 顯示活動面板樹,啟用跳轉到任何目錄
Alt F11 啟用使用向上箭頭鍵縮短面板
Alt F12 啟用使用向下箭頭鍵延長面板
F10 退出當前會話並解除安裝 Volkov Commander。

一些“熱鍵”的功能是重複的。Ctrl-J 和 Ctrl-Enter 的作用與 Ctrl-i 相同:將選定檔案的名稱寫入命令列。Ctrl-Z 的作用與 ALT F10 相同 – 顯示活動面板樹。“0”在數字鍵盤上的作用與 INS 相同:將選定的專案新增到準備執行組操作的專案列表中。列表中包含的專案將以顏色突出顯示。數字鍵盤上的幾個鍵負責準備組操作的輔助功能

Ctrl + 將當前目錄中的所有檔案包含在檔案組列表中
+ 將使用掩碼選擇的 檔案包含在檔案組列表中
Ctrl – 放棄當前的檔案選擇
排除使用掩碼(允許使用萬用字元)選擇的檔案
Ctrl * 反轉當前目錄中的檔案選擇
* 如果當前目錄中的檔案列表尚未形成,則充當“+”,或者如果檔案組列表已存在,則充當“–”

當準備好了一個高亮顯示的專案列表時,操作 F5(複製)、F6(移動)、F8(刪除)將涉及列表中的所有專案。高亮顯示的專案列表作為臨時檔案 VCLIST.000 存在於由環境變數%Temp%定義的目錄中。在 VC 配置檔案(*.MNU*.EXT)中,準備好的高亮顯示的專案列表可以透過特殊的宏命令!~@(對於活動面板)和%~@(對於被動面板)訪問。因此,使用者有機會定義自己的組操作(示例見第 6.25-02 條)。

如果 VC 的兩個面板都被關閉,VC shell 提供更多機會使用左箭頭和右箭頭鍵沿命令列導航,將字元插入命令列,並使用向上和向下箭頭鍵訪問其歷史記錄列表。當 NUMLOCK 鍵關閉時,數字鍵盤上的箭頭鍵以相同的方式工作。

所述 VC 版本(4.99.07)的開發尚未完成。噹噹前目錄中存在外部*.EXT*.MNU檔案,以及當歸檔檔案在非活動面板中保持開啟狀態時,使用者透過配置檔案定義的一些功能可能會出錯。一些“熱鍵”被宣告為活動狀態,但實際上並非如此,或者以錯誤的方式工作

Alt F4 (編輯) 無效,請改用 F4
Alt F5 (記憶體使用情況) 無效
Alt F7 (檔案搜尋) 從 4.99.08 版本開始實現
Ctrl M (恢復組) 無效
Ctrl N (長檔名) 在極少數情況下可能導致掛起
Ctrl Z (顯示樹) 可能持續執行直到按下 ESC 鍵
F1 (VC 的內部幫助) 不可用
F6 (移動和重新命名) 應用於目錄時,停用滑鼠,強制重新載入滑鼠驅動程式。

6.25-02 Volkov Commander 的選單檔案 VC.MNU。

[編輯 | 編輯原始碼]

VC 廣泛的適應能力是由於其選單檔案(*.MNU)和擴充套件檔案(*.EXT)中可用的各種宏命令實現的。

在 VC 的配置檔案中遇到的某些語法符號和數字組被 VC Shell 解釋為對宏的呼叫,然後被替換為該宏返回的結果。此結果可以是名稱、路徑、行等。

以下是 VC 檔案管理器版本 4.99.07 提供的語法符號組和相應宏的列表

![提示] 邀請從鍵盤輸入單詞。方括號內指定的字元構成在此邀請之前顯示的提示。允許最多 10 個獨立的類似邀請,隱式地從第 0 個到第 9 個編號。
!0!9 標記用於插入使用者響應第 0 個到第 9 個編號的邀請輸入的單詞的副本。
!: 標記用於插入在活動面板中開啟的磁碟的磁碟機代號。
%: 標記用於插入在被動面板中開啟的磁碟的磁碟機代號。
!~\ 標記用於插入在 VC 的活動面板中開啟的路徑。返回的路徑以反斜槓結尾。
%~\ 標記用於插入在 VC 的被動面板中開啟的路徑。返回的路徑以反斜槓結尾。
!~ 標記用於插入在 VC 的活動面板中使用滑鼠左鍵選擇的的檔案的短名稱(無後綴)。
%~ 標記用於插入在 VC 的被動面板中使用滑鼠左鍵選擇的的檔案的短名稱(無後綴)。
!~.! 標記用於插入在 VC 的活動面板中使用滑鼠左鍵選擇的的檔案的短名稱(含字尾)。
%~.% 標記用於插入在 VC 的被動面板中使用滑鼠左鍵選擇的的檔案的短名稱(含字尾)。
!~@ 標記用於插入包含在 VC 的活動面板中使用滑鼠右鍵突出顯示的檔名的列表的臨時檔案的名稱。
%~@ 標記用於插入包含在 VC 的被動面板中使用滑鼠右鍵突出顯示的檔名的列表的臨時檔案的名稱。
!! 標記將被替換為單個感嘆號。
%% 標記將被替換為單個百分號。

包含波浪號 (~) 的符號組合呼叫那些將“長”檔名截斷為 8 個字元,“長”字尾截斷為 3 個字元的宏指令。在所有此類符號組合中,都可以省略波浪號 (~),然後在 WINDOWS-95\98\ME OS 的“DOS 視窗”中執行的相同宏將返回“原樣”的長檔名,不會截斷。

使用者有機會在選單檔案 (*.MNU) 和擴充套件檔案 (*.EXT) 中的任何命令列中指定呼叫任何宏的符號組。這些檔案中的所有行都可以使用非格式化文字檔案的編輯器程式 (6.09) 鍵入。選單的每個專案在 VC.MNU 檔案中由一個標題行和至少一個命令列表示。VC 檔案管理器認為命令列是那些以至少一個空格(ASCII 碼 20h)開頭的非空行。相反,標題行不能以空格開頭。在標題行中,後跟冒號的第一組字元被解釋為呼叫此選單項功能的“熱鍵”的規範。冒號右側的其餘片語被解釋為表示此選單項的名稱,當選單顯示在螢幕上時。

當用戶選擇一個選單項以執行時,VC 檔案管理器會將用於呼叫任何宏的所有符號組替換為相應宏返回的資料。這在所選選單項的標題行之後的所有命令列中立即完成。然後,這些命令列逐一發送到 COMMAND.COM 直譯器以執行,該直譯器為每個命令列重新呼叫。由於這個原因,不允許在命令列之間跳轉,並且環境變數的值不能從一個命令列傳輸到同一選單項中的後續命令列。當然,批處理檔案正確執行的所有條件都必須滿足(參見第 9 章的介紹文章)。

下面顯示了 VC.MNU 檔案的示例。其中提到的 Edit.com (6.09)、Fc.exe (6.12)、Scandisk.exe (6.21) 檔案是從 Windows-95/98 版本中提取的程式。Arc.bat 和 Turn_off.com 檔案是在本書的第 9.03-01 條和 9.05-02 條中描述的。所有這些檔案都必須存在於由 %PATH% 環境變數 (2.02-02) 的值指定的目錄中。由於 VC 檔案管理器沒有內部幫助,因此選單第一個專案中提到的 HELP.TXT 檔案意味著包含您自己編寫的文字。HELP.TXT 檔案的路徑需要與 COMMAND.COM 直譯器位於同一磁碟上。

F1:  Help
     @for %%Z in (%%comspec%%) do %%Z\
     @Edit.com /R \DOS\VC4\Help.txt
     @!:\
F4:  Search for a file or filemask in the current subtree
     @rem ![Type filename or mask to search for & press ENTER:]
     @echo.
     @if not !0"==" Dir !0 /P /A:-D /S /B
F5:  Compare a file with synonymous file in non-active panel
     @if !:!~\==%:%~\ echo Other panel must show other folder!!
     @if not !:!~\==%:%~\ Fc /L /N !~.! %:%~\!~.! > %%Temp%%\Y.t
     @if not !:!~\==%:%~\ Edit.com %%Temp%%\Y.t
     @if not !:!~\==%:%~\ del %%Temp%%\Y.t
F6:  Pack file(s) marked in the active panel into a ZIP-archive
     @Arc.bat ZIP !: !~\ !~ !~@ %: %~\
F7:  Pack file(s) marked in the active panel into a RAR-archive
     @Arc.bat RAR !: !~\ !~ !~@ %: %~\
F8:  Repair a disk with Scandisk
     @rem ![Type letter-name of the disk to repair & press Enter]
     @if not !0"==" Scandisk.exe !0: /custom
F10: Switch the PC off
     cls
     @Turn_off.com

與一個選單項相關的每一組命令列幾乎可以被視為一個批處理檔案。第一個專案的目的是顯示準備好的文字。但是當 DOS 被轉移到 RAM 磁碟 (9.04、9.09) 時,此 RAM 磁碟的磁碟機代號無法預先知道。磁碟機代號問題透過其他方式解決:第一條命令列使命令直譯器中指定的磁碟成為當前磁碟。如果 DOS 被轉移,HELP.TXT 檔案也會複製到同一磁碟。因此,第二條命令列中 HELP.TXT 檔案的路徑指的是當前磁碟的根目錄,無論它是哪個。之後,第一個選單項的最後一條命令列恢復了當前磁碟的先前分配。

第二個選單項(使用“熱鍵”F4 呼叫)提供了一個 VC 檔案管理器執行查詢的簡單示例,以及如果使用者對查詢的響應不為空則條件執行命令的示例。關於使用“熱鍵”F8 呼叫的第六個選單項,也可以說相同的話。透過選單呼叫 SCANDISK.EXE 程式是合理的,因為否則經常會忘記非常重要的/CUSTOM引數 (6.21),因此測試過程可能會出錯。

第三個選單項(使用“熱鍵”F5 呼叫)提供了一個有用的過程,用於查詢同時顯示在左側面板和右側面板中的同義文字檔案之間的差異。第一條命令列檢查 VC 的面板中是否打開了不同的目錄。如果是,則第二條命令列中的 FC.EXE 實用程式比較選定的檔案並將報告發送到臨時檔案。第三條命令列在螢幕上顯示此報告,第四條命令列刪除臨時檔案。

不幸的是,所描述的查詢差異的過程並沒有包含所有應該進行的檢查。原因是VC檔案管理器在其自身的緩衝區中執行宏指令資料的替換。由於該緩衝區只有128位元組長,返回的資料增加了在命令傳送到命令直譯器COMMAND.COM執行之前截斷命令列的風險。截斷的威脅是相當真實的,特別是對於第二個帶有對FC.EXE的呼叫的命令列。除此之外,透過%PATH%環境變數呼叫特定版本的實用程式不夠可靠(參見第6章的介紹文章),並且為每個命令列單獨載入命令直譯器會使執行速度變慢,尤其是在從軟盤載入命令直譯器時。

最好將複雜的過程安排成單獨的批處理檔案。這種替代方法的一個示例由批處理檔案ARC.BAT(9.03-01)表示,該檔案從第4和第5個選單項中的命令列呼叫。批處理檔案降低了命令列截斷的風險,消除了對跳轉、無搜尋定址和環境變數使用的限制。

最後,從VC.MNU啟動的批處理檔案執行速度比等效的單獨命令列快得多。

注意

在VC配置檔案(包括VC.MNU)的命令列中,VC檔案管理器允許指定其他帶有*.MNU字尾的選單檔案,即可以指定子選單而不是對可執行實用程式的呼叫。這有可能構建層次選單結構。

  1. 在VC配置檔案(包括VC.MNU)中,所有以引號(')開頭的行都會被跳過。這些行的其餘部分可以填寫註釋。

6.25-03 擴充套件檔案VC.EXT和VCEDIT.EXT。

[編輯 | 編輯原始碼]

Volkov Commander能夠根據所選檔案的字尾對其進行特殊處理。文字配置檔案VC.EXT定義了依賴於字尾的VC對ENTER鍵(以及滑鼠左鍵雙擊)的反應。類似地,文字檔案VCVIEW.EXT定義了依賴於字尾的對F3(檢視)鍵的反應,而文字檔案VCEDIT.EXT定義了對F4(編輯)鍵的反應。

這些檔案中的字尾定義指定在行的最左邊,後面必須跟著一個冒號。冒號右側是指定要執行的命令。如果一個按鍵必須呼叫多個命令,則下一條命令的行緊隨其下;這些行必須以一個或多個空格開頭(而不是字尾定義)。如果字尾定義後面沒有命令,則具有此後綴的檔案將呼叫下面最近一行中指定的命令。字尾定義可以包含萬用字元(?*)。

每個使用者都必須根據自己的需要選擇透過擴充套件檔案呼叫的特定程式。以下VC.EXT檔案的示例並非旨在展示所有可以想到的功能,它只是反映了作者的品味。

bas: Qbasic.exe /run !~.!
bmp:
gif:
jpg:
pcx: Lxpic.com !~.! /A
1st:
diz:
doc:
lsm:
me:
rus:
txt:
?!!: @echo _______ > !@\..\t.txt
     @copy !@\..\t.txt /B + !~.! !@\..\.
     @Emagic.exe -q -n3 !@\..\t.txt
     @Svtxt.com !@\..\t.txt
htm: @echo _______ > !@\..\t.txt
     @Html2txt.com < !~.! >> !@\..\t.txt
     @Emagic.exe -q -n3 !@\..\t.txt
     @Svtxt.com !@\..\t.txt
scr: @rem ![Press ENTER to get listing or ESC to quit]
     @echo Processing goes on. Wait...
     @Debug.exe < !~.! > !@\..\Listing.txt
     @Edit.com !@\..\Listing.txt !~.!
ima:
wbt: Diskimg.mnu

所示的VC.EXT檔案示例以一個簡單的行開頭:用QBASIC語言編寫的命令檔案被定向到其直譯器。後者可以在MSDOS6.22版本或SFX存檔OLDDOS.EXE中找到,該存檔可在Microsoft的ftp伺服器ftp://ftp.microsoft.com/softlib/mslfiles/上獲得。您必須記住,必須在SETVER.EXE驅動程式(5.01-02)的版本表中寫入相應的記錄,以便在MS-DOS 7下啟用QBASIC.EXE的使用。

VC.EXT檔案中的下一組行將圖片檔案(*.BMP*.GIF*.JPG*.PCX)定向到由Stefan Peichl開發的圖片檢視器LXPIC.COM。此檢視器的7.3版本(2002年釋出),打包在存檔LXPIC.ZIP中,可以從網際網路網站http://hplx.pgdn.de/下載。

在VC.EXT檔案中,列出了大量字尾(*.1ST*.DIZ等),這些字尾通常表示文字檔案。在俄語中讀取文字檔案的主要問題是由各種可能的編碼引起的。此問題由Sergey Gernshtein編寫的實用程式EMAGIC.EXE解決。EMAGIC.EXE分析文字統計資料,確定編碼型別,然後自動將文字轉換為內碼表CP866。包含EMAGIC.EXE實用程式的存檔EMAGIC.ZIP可以從網際網路ftp伺服器ftp://ftp.botik.ru/pub/msdos/convert/下載。不使用內碼表CP866的使用者建議從VC.EXT檔案中刪除呼叫EMAGIC.EXE的行。

在螢幕上顯示文字檔案是Lo Hung Che為FreeDos專案編寫的檢視器SVTXT.COM的任務。此檢視器打包在存檔PG116.ZIP中,可以從伺服器ftp://sunsite.unc.edu/pub/micro/pc-stuff/freedos/files/util/file/pg/下載。SVTXT.COM檢視器以換行形式顯示長文字行,並且能夠處理無限長檔案的前64 KB。SVTXT.COM檢視器無法提取文字部分,但稍後可以使用EDIT.COM編輯器(6.09)執行此操作,因為已轉換為內碼表CP866的顯示文字的副本將作為T.TXT檔案儲存在用於臨時檔案的目錄中。

如果事先去除了超文字標記,則帶有*.HTM字尾的超文字檔案可以像普通文字檔案一樣處理。後者是由Shin Chan編寫的HTML2TXT.COM實用程式執行的。包含HTML2TXT.COM實用程式的存檔HTML2T08.LZH可以從網際網路網站http://www.vector.co.jp/download/file/dos/net/fh050307.html下載。所示的超文字檔案翻譯序列不建議不閱讀俄語的人使用。對於他們來說,最好將*.HTM檔案直接傳送到超文字檢視器VH.EXE。此檢視器打包在VIEWHT25.ZIP存檔中,可以從網際網路伺服器ftp://ftp.bu.edu/pub/mirrors/simtelnet/msdos/html/下載。

字尾*.SCR最常標記偵錯程式DEBUG.EXE的命令檔案,但也可能存在例外。此外,執行某些偵錯程式的命令檔案可能會造成不良後果。因此,對於具有*.SCR字尾的檔案,Volkov Commander會發出查詢。如果使用者使用ENTER鍵對查詢做出響應,則命令檔案將被髮送到偵錯程式,返回的列表將顯示在螢幕上以供編輯。此過程對於更正返回列表(9.07-01)中顯示的命令檔案中的錯誤非常方便。

帶有*.IMA字尾的檔案是磁碟映像。這些檔案可以解包或寫回磁碟。對使用者選擇的呼叫需要建立一個新的子選單。讓我們將其命名為DISKIMG.MNU。在此子選單中,寫入磁碟由實用程式IMG.EXE執行,解包由實用程式DDI2HDD.EXE執行。這兩個實用程式都可以在網際網路ftp伺服器ftp://ftp.elf.stuba.sk/pub/pc/utildisk/中分別下載,它們分別位於IMG.ARJ和DDI2HDD.ZIP存檔中。下面顯示了一個子選單示例;其文字必須儲存為VC其他配置檔案的公共目錄中的未格式化文字檔案DISKIMG.MNU。在DISKIMG.MNU中,就像在VC.MNU中一樣,必須在行的最左邊鍵入“熱鍵”的名稱,前面沒有空格。

F4:  Write the image onto diskette in drive A:
     @Img.exe !~.! A:
F8:  Unpack files from the diskette image
     @if not %~\"==" Ddi2hdd.exe !~.! %:%~\. /d /s
     @if %~\"==" echo Archive in passive panel must be closed
     @if not %~\"==" echo Unpacked files are in %:%~\!~ folder

在編寫您自己的VC擴充套件檔案示例時,您必須記住,除了顯式指定的運算外,Volkov Commander還會執行一些隱式的依賴於字尾的處理。特別是,在解釋VC.EXT檔案中的所有行之後,預設情況下,選定的具有*.BAT*.COM*.EXE字尾的檔案將被傳遞給命令直譯器以執行,並且存檔檔案將根據VCARCH.EXT檔案(6.25-04)中的規範進一步處理。如果在VC.EXT檔案中指定了上述字尾,則相應檔案的預設處理將被攔截,並且不會執行。由於這個原因,在VC.EXT中沒有指定存檔和可執行檔案的字尾。

類似地,在按下F3(檢視)鍵後,Volkov Commander僅將其內部檢視器傳遞給未被擴充套件檔案VCVIEW.EXT中的字尾規範攔截的檔案。VC的內部檢視器以二進位制和文字形式顯示任何檔案的內容。能夠“按原樣”檢視任何檔案本身就是有價值的,因此,在我看來,不需要VCVIEW.EXT檔案。如果您的意見不同,您可以編寫您自己的VCVIEW.EXT版本,以所示的VC.EXT檔案為例。VCVIEW.EXT和VC.EXT檔案中的記錄語法相同。

當在活動面板中開啟的存檔中選擇要檢視或編輯的檔案時,F3和F4鍵都會將檔案從該存檔解包到臨時目錄%TEMP%\VC.000中。然後,VCVIEW.EXT和VCEDIT.EXT檔案中的行中的!~.!標記將替換為相應的宏,該宏的名稱為解包的檔案,前面是該臨時目錄的路徑。因此,F3鍵可以無需顯式解包即可檢視存檔中的內容。類似地,F4鍵將解包的檔案置於VCEDIT.EXT檔案行中指定的任何操作之下。

編輯操作不如檢視安全:編輯器程式可能會損壞所處理的檔案,尤其是在所處理的檔案不是解包的副本時。VCEDIT.EXT檔案中的命令序列必須保護易受攻擊的非文字檔案免受意外損壞。因此,下面的示例中,二進位制檔案和存檔被一個空操作(REM)攔截,從而避免了被損壞的風險。

bas: Qbasic.exe !~.!
bin:
cab:
com:
exe:
rar:
zip: @rem
bmp:
gif:
jpg:
pcx: Lxpic.com !~.! /A
*:    Edit.com !~.!

圖片檔案由單獨的攔截進行保護:它允許檢視檔案內部的圖片。所有其餘檔案透過星號萬用字元規範(而不是字尾)在最後一行定向到編輯器程式。由於 Volkov Commander 4.99.07 版本沒有內建編輯器,所以在 VCEDIT.EXT 檔案的示例中,EDIT.COM 編輯器(6.09)承擔了此任務。

注意
  1. 所有 *.EXT 檔案在 VC shell 啟動時讀取一次。除非關閉 VC shell 並重新啟動,否則 *.EXT 檔案的更改不會生效。
  2. 在 VC 的擴充套件檔案中,所有以單引號 (') 開頭的行都會被跳過。這些行的其餘部分可以填寫註釋。

6.25-04 檔案處理配置檔案 VCARCH.EXT

[編輯 | 編輯原始碼]

在 VC 4.99.07 版本的面板中,檔案可以像目錄一樣開啟。此功能是透過攔截歸檔實用程式的 STDOUT 輸出並根據預定的順序逐詞解析來實現的。如果發現輸出行符合順序,則可以將此行中的選定單詞識別為檔名、日期、長度等。這些資料在 VC 的面板中顯示,就像普通目錄一樣。

由於不同歸檔實用程式的輸出資料顯示格式不相同,VC shell 必須根據由其後綴定義的檔案型別調整解析順序。不同檔案型別的解析順序模型在配置檔案 VCARCH.EXT 中指定。此外,VCARCH.EXT 允許為一種型別的檔案指定多個解析順序模型,並且如果發現輸出行符合至少一個模型,則會對其進行解析。

VCARCH.EXT 由每個檔案型別的單獨條目組成,每個條目最多 5 行。每個條目中的第一行定義檔案字尾(必須在行的最左邊指定)和相應的解析順序模型。字尾與解析順序模型之間用冒號分隔。解析順序模型的定義由空格分隔符和大寫字元組成,解釋如下

A – 儲存在檔案內的檔案的屬性;
C – 壓縮後文件的尺寸;
D – 最後修改的日期或天數;
L – 換行符,用於在下一行繼續解析;
M – 月份;
N – 儲存在檔案內的檔名;
P – 儲存在檔案內的路徑;
S – 儲存在檔案內的檔案的原始大小
T – 最後修改的時間;
W – 要忽略的單詞;
Y – 年份;
; – 解析順序模型之間的分號分隔符;
' 或 " – 用於括住任何可識別符號或文字的引號;
\ – 解析順序模型的第一個符號為反斜槓表示此模型引用目錄。

每個條目中的接下來的四行至少以一個空格開頭,並定義對相應歸檔實用程式的呼叫以執行特定操作

第 2 行 將檔案內容表傳送到 STDOUT。每次重新繪製面板時都會自動啟動此操作。
第 3 行 解壓縮選定的檔案檔案。如果檔案在活動面板中開啟,則透過 F5(複製)鍵擊啟動解壓縮。
第 4 行 將檔案新增到檔案。如果檔案在被動面板中開啟,則透過 F5(複製)鍵擊啟動新增。
第 5 行 從檔案中刪除檔案。此操作由 F8(刪除)鍵擊啟動。

第 3 行中指定的解壓縮操作也可以透過 F3(檢視)和 F4(編輯)鍵啟動。在這種情況下,解壓縮的結果將寫入臨時檔案目錄,並根據擴充套件檔案 VCVIEW.EXT 和 VCEDIT.EXT 中的規範立即顯示以供檢視或編輯。

在各種檔案型別中,只有少數幾種被積極用於打包。VCARCH.EXT 檔案中的大部分其他條目都保留用於單一目的:用於訪問在軟體商店中偶爾遇到的檔案型別。VCARCH.EXT 檔案中此類檔案型別的條目可以減少到三行。

在解釋 VCARCH.EXT 檔案中的命令列時,Volkov Commander 無法訪問環境變數,但提供了特定宏,這些宏與其他擴充套件檔案中可用的宏不同。VCARCH.EXT 檔案中的宏命令呼叫由以下標記引起

!A – 用檔案檔名及其前面的路徑替換此標記。
!T – 用臨時檔案目錄的路徑替換此標記。
!F – 用左滑鼠按鈕單擊選擇的 filename 替換此標記。
!M – 用右滑鼠按鈕單擊選擇的一個或多個檔名替換此標記。
!@ – 用包含右滑鼠按鈕單擊選擇的檔名列表的臨時檔名稱替換此標記。

下面顯示了 VCARCH.EXT 檔案條目的示例。條目示例中提到的所有可執行檔案都必須沿環境變數 %PATH%(2.02-02)的值中指定的路徑訪問。

ARC: N S W C W D T W
     Pkxarc.exe –v !A
     Pkxarc.exe –e !A @!@
BSA:
BSN: W S C W W D "–" M "–" Y T A L N; W S C W W D "–" M "–1" Y T A L N
     Bsa.exe v !A
     Bsa.exe x –S !A @!@
CAB: M "–" D "–" Y T A S N; N ":" W W W W W W W
     Extract.exe /d !A
     Extract.exe /e !A !M
RAR:
R0?:
R1?:
R2?: "*" N L S C W D T A W W W; N L S C W D T A W W W
     Unrar.exe v –r –w!T !A
     Unrar.exe x –r –w!T !A @!@
     Rar.exe a –std –ds –r –rr -ems- –w!T !A @!@
     Rar.exe d -std –r –rr -ems- –w!T !A @!@
TAR: A W S N L
     Tar.exe -tvf !A
     Tar.exe -xnf !A !M !F
UHA: N S D "-" M "-" Y T A
     Uharcd.exe l -y+ !A
     Uharcd.exe x !A !M !F
ZIP:
??!:
?$:
??$: S W C W D T W A N
     Pkunzip.exe –v !A
     Pkunzip.exe –d !A @!@
     Pkzip.com –b!T –P –wHS !A @!@
     Pkzip.com –b!T -d !A @!@
1:
2:
3:
4:
Z:   M "–" D "–" Y T S A C N
     Command.com /c Icomp.exe –l –h !A
     Command.com /c Icomp.exe –d –i –h !A !F

Volkov Commander 4.99.07 版本附帶了 VCARCH.EXT 檔案,其中包含許多檔案型別的條目。本文中顯示的條目示例不應被視為完整的 VCARCH.EXT 檔案。這些示例代表單獨的條目,它們與原始版本中的條目不同。建議的條目可以新增到原始 VCARCH.EXT 檔案中,也可以替換此檔案中的原始條目。建議條目中提到的所有歸檔程式都可以從 ftp 伺服器 ftp://ftp.elf.stuba.sk/pub/pc/pack/ 上的大量歸檔程式集中下載。

6.26 XCOPY.EXE – 複製實用程式

[編輯 | 編輯原始碼]

XCOPY.EXE 實用程式複製檔案,並且可以複製目錄及其所有內容,包括子目錄。XCOPY.EXE 需要在同一目錄中存在輔助檔案 XCOPY32.EXE。呼叫 XCOPY.EXE 的命令列可能如下所示

Xcopy.exe D:\TEMP\*.* C:\DOS /A /D /P /S /V /W

其中

D:\TEMP\*.* – 要複製的檔案的路徑和掩碼示例。
C:\DOS 複製的目標路徑示例。
/A 僅複製設定了“A”屬性的檔案,並保持此屬性不變。/M 選項含義相同,但“A”屬性將被取消。
/D 僅複製原始檔比目標目錄中同名檔案更新的檔案。如果在 /D 引數之後指定日期(例如,/D:18/12/2003),則將複製比該日期更新的檔案。[註釋 2]
/P 在將每個檔案複製到目標目錄之前提示。
/S 複製目錄和子目錄,但空目錄除外。同時指定 /S/E 選項將強制複製空目錄。
/V 驗證每個複製的檔案。
/W 等待複製許可權,透過按鍵確認(以便有時間更改源或目標儲存介質)
注意
  1. 在 MS-DOS 下啟動時,XCOPY.EXE 無法複製具有 H(隱藏)或 S(系統)屬性的檔案。只有在 Windows 的“DOS 視窗”中才能執行此功能和其他一些功能。
  2. ^/D 引數之後指定的日期格式取決於由 COUNTRY 命令(4.05)定義的國家/地區設定。無論如何,日期格式必須與 DATE 命令(3.08)返回的日期格式相同。
  3. 在 MS-DOS 8 中,輔助檔案 XCOPY32.EXE 重新命名為 XCOPY32.MOD。
  4. 2003 年,Rene Ableidinger 在 FreeDOS 專案中編寫了一個同名的實用程式 XCOPY.EXE。此實用程式不需要輔助檔案,並且能夠在 MS-DOS 7 下複製具有 HS 屬性的檔案。包含此實用程式的檔案 RXCOPY2.ZIP 可以從網際網路伺服器 ftp://sunsite.unc.edu/pub/micro/pc-stuff/freedos/files/dos/ 下載。
華夏公益教科書