在 FreeDOS 中使用批處理文件
在 Linux 上,創建 shell 腳本 來自動執行重複的任務是很常見的。類似地,在開源版的舊式 DOS 操作系統 FreeDOS 上,你可以創建一個包含數個 FreeDOS 命令的 批處理文件 。然後,你就可以運行你的批處理文件來按順序執行每個命令。
你可以使用一個 ASCII 文本編輯器來創建批處理文件,諸如 FeeDOS 的 Edit 應用程序。在你創建一個批處理文件後,你可以使用一個文件名稱加上擴展名 .bat
來保存它。文件名稱應該是唯一的。如果你使用 FreeDOS 的一個命令的名稱作為你自己的文件名稱,那麼可能將會執行 FreeDOS 的命令,而不會是你的批處理文件。
實際上,所有的內部的和外部的 FreeDOS 命令都可以在一個批處理文件中使用。在你創建一個批處理文件時,你其實就是在編寫一個程序。FreeDOS 批處理文件可能沒有結構化編程語言的功能,但是對於耗時短暫卻重複乏味的任務來說,它是非常方便的。
注釋你的代碼
對於任何程序員來說,學習的第一個好習慣都應該是:在一個程序中放置注釋來解釋該代碼正在做什麼。這是一件非常容易完成的事情,但是你需要仔細,不要傻傻地讓操作系統來執行你的注釋。避免出現這種情況的方法是在一個注釋行的開頭處放置 REM
(「remark」 的縮寫) 。
FreeDOS 忽略以 REM
開頭的代碼行。但是任何查看源文件代碼(即你在你的批處理文件中所編寫的文本)的人都可以讀取你的注釋並理解它在做什麼。這也是一種臨時性禁用一個命令而不需要刪除它的一種方法。只需要打開你的批處理文件來進行編輯,在你想要禁用行的開頭處放置 REM
,並保存它。在你想要重新啟用這個命令時,只需要打開文件來進行編輯和移除 REM
。這種技巧有時被稱為 「注釋掉」 一個命令。
開始設置
在你開始編寫你自己的批處理文件前,我建議在 FreeDOS 中創建一個臨時目錄。這將會為你提供一個處理批處理文件的安全空間,不會意外地刪除、移動,或重命名重要的系統文件或目錄。在 FreeDOS 上,你可以使用 MD
命令來 創建一個目錄 :
C:>MD TEMP
C:>CD TEMP
C:TEMP>
FreeDOS 的 ECHO
命令會控制當你運行一個批處理文件時在屏幕上顯示的東西。例如,這裡是一個簡單是單行批處理文件:
ECHO Hello world
如果你創建這個文件並運行它,你將看到在屏幕上顯示的句子。從命令行中完成這項操作的最快的方法是:使用 COPY
命令來從你的鍵盤中(CON
)獲取輸入,並將其放置到文件 TEST1.BAT
之中。接下來,按下組合鍵 Ctrl+Z
來停止複製過程,按下你鍵盤上的 Return
或 Enter
按鍵來返回一個提示。
在你的臨時目錄中嘗試創建這個文件為 TEST1.BAT
,接下來運行它:
C:TEMP>COPY CON TEST1.BAT
CON => TEST1.BAT
ECHO Hello world
^Z
C:TEMP>TEST1
Hello world
當你想要顯示一段文本時,這可能很有用。例如,在一個程序完成它的任務時,你可能會在你的屏幕上看到一條告訴你需要等待的消息,或者在一個網路環境中時,你可能會看到一條登錄消息。
如果你想要顯示一個空行怎麼辦?你可能會認為 ECHO
命令本身就可以達到目的,但是單獨一個 ECHO
命令只會詢問 FreeDOS 來響應 ECHO
是打開還是關閉:
C:TEMP>ECHO
ECHO is on
獲取一個空白行的方法是在 ECHO
後緊接著使用一個 +
符號:
C:TEMP>ECHO+
C:TEMP>
批處理文件變數
變數是一個存儲你需要你的批處理文件臨時記住的信息的位置。這是編程的一個重要的功能,因為你不能總是知道你的批處理文件需要使用什麼樣的數據。這裡有一個用於演示的簡單示例。
創建 TEST3.BAT
:
@MD BACKUPS
COPY %1 BACKUPS%1
變數是使用百分比符號和隨後的數字表示的,因此,這個批處理文件將在你的當前目錄中創建一個 BACKUPS
子目錄,然後將複製變數 %1
到 BACKUPS
文件夾之中。這個變數是什麼?當你運行批處理文件時,變數由你決定:
C:TEMP>TEST3 TEMP1.BAT
TEST1.BAT => BACKUPSTEST1.BAT
你的批處理文件已經複製 TEST1.BAT
到一個名稱為 BACKUPS
的子目錄,因為在你運行批處理文件時,你標識這個文件為一個參數。你的批處理文件將把 %1
替換為 TEST1.BAT
。
變數是按位置的。變數 %1
是你提供給命令的第一個參數,變數 %2
是第二個參數,以此類推。假設你創建一個批處理文件來列出一個目錄的內容:
DIR %1
嘗試運行它:
C:TEMP>TEST4.BAT C:HOME
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
這像預期一樣的工作。但是下面這個卻失敗了:
C:TEMP>TEST4.BAT C:HOME C:DOCS
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
如果你嘗試它,你將得到第一個參數(C:HOME
)的列表,而得不到第二個參數(C:DOCS
)的列表。這是因為你的批處理文件僅查找一個變數(%1
),此外,DIR
命令也僅能獲取一個目錄。
此外,當你運行一個批處理文件時,你也不需要為其具體指定擴展名 —— 除非你運氣相當不好地為批處理文件選取了一個與 FreeDOS 外部命令或類似命令相同的名稱。當 FreeDOS 執行命令時,它按下面的順序執行:
- 內部命令
- 帶有 *.COM 擴展名的外部命令
- 帶有 *.EXE 擴展名的外部命令
- 批處理文件
多個參數
好的,選擇重新編寫 TEST4.BAT
文件來使一個命令可以獲取兩個參數,以便你可以看到這是如何工作的。首先,使用 EDIT
應用程序來創建一個簡單的名稱為 FILE1.TXT
的文本文件。在其中放置一段某種類型(例如,「Hello world」)的語句,並在你的 TEMP
工作目錄中保存文件。
接下來,使用 EDIT
來更改你的 TEST4.BAT
文件:
COPY %1 %2
DIR
保存它,然後執行命令:
C:TEMP>TEST4 FILE1.TXT FILE2.TXT
在運行你的批處理文件時,你會看一個你的 TEMP
目錄的目錄列表。在列出的文件之中,你有 FILE1.TXT
和 FILE2.TXT
,它們是由你的批處理文件所創建的。
嵌套批處理文件
批處理文件的另一個功能是能夠 「嵌套」 ,這意味著一個批處理文件可以在另外一個批處理文件中被調用和運行。為查看這是如何工作的,從一對簡單的批處理文件開始:
第一個文件被稱為 NBATCH1.BAT
:
@ECHO OFF
ECHO Hello
CALL NBATCH2.BAT
ECHO world
第一行 (@ECHO OFF
) 輕輕地告訴批處理文件在你運行它時僅顯示命令 (而不是命令本身) 的輸出。你可能會在前面的示例中注意到這裡有很多關於批處理文件正在做什麼的反饋;在這種情況下,你正在允許你的批處理文件僅顯示結果。
第二個批處理被稱為 NBATCH2.BAT :
echo from FreeDOS
使用 EDIT
來創建這兩個文件,並在你的 TEMP 子目錄中保存它們。運行 NBATCH1.BAT
來查看會發生什麼:
C:TEMP>NBATCH1.BAT
Hello
from FreeDOS
world
你的第二個批處理文件將在第一個批處理文件之中通過 CALL
命令來執行,它將提供在你 「Hello world」 信息中間的字元串 「from FreeDOS」 。
FreeDOS 腳本
編寫你自己的簡單程序來自動執行通常需要大量輸入的任務的批處理文件,是一種極好的方法。你使用的 FreeDOS 越多, 你將越熟悉它的命令,在你熟知命令後,在一個批處理文件中列出它們僅是一件使你的 FreeDOS 系統讓你生活輕鬆的事情。嘗試一下!
via: https://opensource.com/article/21/3/batch-files-freedos
作者:Kevin O'Brien 選題:lujun9972 譯者:[robsean]](https://github.com/robsean) 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive