在 FreeDOS 中使用批處理文件
編寫你自己的簡(jiǎn)單程序來自動(dòng)執(zhí)行通常需要大量輸入的任務(wù)的批處理文件,是一種極好的方法。
在 Linux 上,創(chuàng)建 shell 腳本 來自動(dòng)執(zhí)行重復(fù)的任務(wù)是很常見的。類似地,在開源版的舊式 DOS 操作系統(tǒng) FreeDOS 上,你可以創(chuàng)建一個(gè)包含數(shù)個(gè) FreeDOS 命令的 批處理文件 。然后,你就可以運(yùn)行你的批處理文件來按順序執(zhí)行每個(gè)命令。
你可以使用一個(gè) ASCII 文本編輯器來創(chuàng)建批處理文件,諸如 FeeDOS 的 Edit 應(yīng)用程序。在你創(chuàng)建一個(gè)批處理文件后,你可以使用一個(gè)文件名稱加上擴(kuò)展名 .bat
來保存它。文件名稱應(yīng)該是唯一的。如果你使用 FreeDOS 的一個(gè)命令的名稱作為你自己的文件名稱,那么可能將會(huì)執(zhí)行 FreeDOS 的命令,而不會(huì)是你的批處理文件。
實(shí)際上,所有的內(nèi)部的和外部的 FreeDOS 命令都可以在一個(gè)批處理文件中使用。在你創(chuàng)建一個(gè)批處理文件時(shí),你其實(shí)就是在編寫一個(gè)程序。FreeDOS 批處理文件可能沒有結(jié)構(gòu)化編程語(yǔ)言的功能,但是對(duì)于耗時(shí)短暫卻重復(fù)乏味的任務(wù)來說,它是非常方便的。
注釋你的代碼
對(duì)于任何程序員來說,學(xué)習(xí)的第一個(gè)好習(xí)慣都應(yīng)該是:在一個(gè)程序中放置注釋來解釋該代碼正在做什么。這是一件非常容易完成的事情,但是你需要仔細(xì),不要傻傻地讓操作系統(tǒng)來執(zhí)行你的注釋。避免出現(xiàn)這種情況的方法是在一個(gè)注釋行的開頭處放置 REM
(“remark” 的縮寫) 。
FreeDOS 忽略以 REM
開頭的代碼行。但是任何查看源文件代碼(即你在你的批處理文件中所編寫的文本)的人都可以讀取你的注釋并理解它在做什么。這也是一種臨時(shí)性禁用一個(gè)命令而不需要?jiǎng)h除它的一種方法。只需要打開你的批處理文件來進(jìn)行編輯,在你想要禁用行的開頭處放置 REM
,并保存它。在你想要重新啟用這個(gè)命令時(shí),只需要打開文件來進(jìn)行編輯和移除 REM
。這種技巧有時(shí)被稱為 “注釋掉” 一個(gè)命令。
開始設(shè)置
在你開始編寫你自己的批處理文件前,我建議在 FreeDOS 中創(chuàng)建一個(gè)臨時(shí)目錄。這將會(huì)為你提供一個(gè)處理批處理文件的安全空間,不會(huì)意外地刪除、移動(dòng),或重命名重要的系統(tǒng)文件或目錄。在 FreeDOS 上,你可以使用 MD
命令來 創(chuàng)建一個(gè)目錄 :
C:\>MD TEMP
C:\>CD TEMP
C:\TEMP>
FreeDOS 的 ECHO
命令會(huì)控制當(dāng)你運(yùn)行一個(gè)批處理文件時(shí)在屏幕上顯示的東西。例如,這里是一個(gè)簡(jiǎn)單是單行批處理文件:
ECHO Hello world
如果你創(chuàng)建這個(gè)文件并運(yùn)行它,你將看到在屏幕上顯示的句子。從命令行中完成這項(xiàng)操作的最快的方法是:使用 COPY
命令來從你的鍵盤中(CON
)獲取輸入,并將其放置到文件 TEST1.BAT
之中。接下來,按下組合鍵 Ctrl+Z
來停止復(fù)制過程,按下你鍵盤上的 Return
或 Enter
按鍵來返回一個(gè)提示。
在你的臨時(shí)目錄中嘗試創(chuàng)建這個(gè)文件為 TEST1.BAT
,接下來運(yùn)行它:
C:\TEMP>COPY CON TEST1.BAT
CON => TEST1.BAT
ECHO Hello world
^Z
C:\TEMP>TEST1
Hello world
當(dāng)你想要顯示一段文本時(shí),這可能很有用。例如,在一個(gè)程序完成它的任務(wù)時(shí),你可能會(huì)在你的屏幕上看到一條告訴你需要等待的消息,或者在一個(gè)網(wǎng)絡(luò)環(huán)境中時(shí),你可能會(huì)看到一條登錄消息。
如果你想要顯示一個(gè)空行怎么辦?你可能會(huì)認(rèn)為 ECHO
命令本身就可以達(dá)到目的,但是單獨(dú)一個(gè) ECHO
命令只會(huì)詢問 FreeDOS 來響應(yīng) ECHO
是打開還是關(guān)閉:
C:\TEMP>ECHO
ECHO is on
獲取一個(gè)空白行的方法是在 ECHO
后緊接著使用一個(gè) +
符號(hào):
C:\TEMP>ECHO+
C:\TEMP>
批處理文件變量
變量是一個(gè)存儲(chǔ)你需要你的批處理文件臨時(shí)記住的信息的位置。這是編程的一個(gè)重要的功能,因?yàn)槟悴荒芸偸侵滥愕呐幚砦募枰褂檬裁礃拥臄?shù)據(jù)。這里有一個(gè)用于演示的簡(jiǎn)單示例。
創(chuàng)建 TEST3.BAT
:
@MD BACKUPS
COPY %1 BACKUPS\%1
變量是使用百分比符號(hào)和隨后的數(shù)字表示的,因此,這個(gè)批處理文件將在你的當(dāng)前目錄中創(chuàng)建一個(gè) BACKUPS
子目錄,然后將復(fù)制變量 %1
到 BACKUPS
文件夾之中。這個(gè)變量是什么?當(dāng)你運(yùn)行批處理文件時(shí),變量由你決定:
C:\TEMP>TEST3 TEMP1.BAT
TEST1.BAT => BACKUPS\TEST1.BAT
你的批處理文件已經(jīng)復(fù)制 TEST1.BAT
到一個(gè)名稱為 BACKUPS
的子目錄,因?yàn)樵谀氵\(yùn)行批處理文件時(shí),你標(biāo)識(shí)這個(gè)文件為一個(gè)參數(shù)。你的批處理文件將把 %1
替換為 TEST1.BAT
。
變量是按位置的。變量 %1
是你提供給命令的第一個(gè)參數(shù),變量 %2
是第二個(gè)參數(shù),以此類推。假設(shè)你創(chuàng)建一個(gè)批處理文件來列出一個(gè)目錄的內(nèi)容:
DIR %1
嘗試運(yùn)行它:
C:\TEMP>TEST4.BAT C:\HOME
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
這像預(yù)期一樣的工作。但是下面這個(gè)卻失敗了:
C:\TEMP>TEST4.BAT C:\HOME C:\DOCS
ARTICLES
BIN
CHEATSHEETS
GAMES
DND
如果你嘗試它,你將得到第一個(gè)參數(shù)(C:\HOME
)的列表,而得不到第二個(gè)參數(shù)(C:\DOCS
)的列表。這是因?yàn)槟愕呐幚砦募H查找一個(gè)變量(%1
),此外,DIR
命令也僅能獲取一個(gè)目錄。
此外,當(dāng)你運(yùn)行一個(gè)批處理文件時(shí),你也不需要為其具體指定擴(kuò)展名 —— 除非你運(yùn)氣相當(dāng)不好地為批處理文件選取了一個(gè)與 FreeDOS 外部命令或類似命令相同的名稱。當(dāng) FreeDOS 執(zhí)行命令時(shí),它按下面的順序執(zhí)行:
- 內(nèi)部命令
- 帶有 *.COM 擴(kuò)展名的外部命令
- 帶有 *.EXE 擴(kuò)展名的外部命令
- 批處理文件
多個(gè)參數(shù)
好的,選擇重新編寫 TEST4.BAT
文件來使一個(gè)命令可以獲取兩個(gè)參數(shù),以便你可以看到這是如何工作的。首先,使用 EDIT
應(yīng)用程序來創(chuàng)建一個(gè)簡(jiǎn)單的名稱為 FILE1.TXT
的文本文件。在其中放置一段某種類型(例如,“Hello world”)的語(yǔ)句,并在你的 TEMP
工作目錄中保存文件。
接下來,使用 EDIT
來更改你的 TEST4.BAT
文件:
COPY %1 %2
DIR
保存它,然后執(zhí)行命令:
C:\TEMP\>TEST4 FILE1.TXT FILE2.TXT
在運(yùn)行你的批處理文件時(shí),你會(huì)看一個(gè)你的 TEMP
目錄的目錄列表。在列出的文件之中,你有 FILE1.TXT
和 FILE2.TXT
,它們是由你的批處理文件所創(chuàng)建的。
嵌套批處理文件
批處理文件的另一個(gè)功能是能夠 “嵌套” ,這意味著一個(gè)批處理文件可以在另外一個(gè)批處理文件中被調(diào)用和運(yùn)行。為查看這是如何工作的,從一對(duì)簡(jiǎn)單的批處理文件開始:
第一個(gè)文件被稱為 NBATCH1.BAT
:
@ECHO OFF
ECHO Hello
CALL NBATCH2.BAT
ECHO world
第一行 (@ECHO OFF
) 輕輕地告訴批處理文件在你運(yùn)行它時(shí)僅顯示命令 (而不是命令本身) 的輸出。你可能會(huì)在前面的示例中注意到這里有很多關(guān)于批處理文件正在做什么的反饋;在這種情況下,你正在允許你的批處理文件僅顯示結(jié)果。
第二個(gè)批處理被稱為 NBATCH2.BAT :
echo from FreeDOS
使用 EDIT
來創(chuàng)建這兩個(gè)文件,并在你的 TEMP 子目錄中保存它們。運(yùn)行 NBATCH1.BAT
來查看會(huì)發(fā)生什么:
C:\TEMP\>NBATCH1.BAT
Hello
from FreeDOS
world
你的第二個(gè)批處理文件將在第一個(gè)批處理文件之中通過 CALL
命令來執(zhí)行,它將提供在你 “Hello world” 信息中間的字符串 “from FreeDOS” 。
FreeDOS 腳本
編寫你自己的簡(jiǎn)單程序來自動(dòng)執(zhí)行通常需要大量輸入的任務(wù)的批處理文件,是一種極好的方法。你使用的 FreeDOS 越多, 你將越熟悉它的命令,在你熟知命令后,在一個(gè)批處理文件中列出它們僅是一件使你的 FreeDOS 系統(tǒng)讓你生活輕松的事情。嘗試一下!