批處理概述

公子奇的博客發表於2024-08-30

這裡,我將介紹批處理指令碼語言及其在MS-DOS命令提示符中的歷史起源,以及包含其原始碼的兩種型別的檔案:bat和cmd。我還將討論編輯器,它是編寫bat檔案的主要工具,以及可供您使用的選項。最後,如果沒有對直譯器的概述,對批處理領域的介紹就不完整。

MS-DOS命令提示符

每一臺裝有微軟Windows的計算機上都自帶MS-DOS命令提示符,如果你幾十年前接觸過電腦的話,你可能還使用過黑色的矩形來操作電腦,在那裡你輸入命令來執行各種任務,比如安裝或啟動程式,或者複製或刪除檔案。現在作為普通使用者很少會這些操作的,因為圖形使用者介面已經簡化了這些任務,因此只需點選幾下即可執行,但是命令列依然是存在的。

要訪問Windows計算機上的命令提示符,請在開始中的搜尋框輸入CMD,這是命令的縮寫。按ENTER, MS-DOS命令提示符將開啟。從這個提示符中,您可以輸入一些命令。您可以執行程式,複製檔案,甚至刪除整個C:\driver。不過,不要驚慌;我們這裡先不會介紹具體的命令列。

這裡我們先介紹一個案例讓你感受下命令列的魅力:假設你正在處理一個資料夾,資料夾中有幾個文件。當你每天花幾個小時處理了這些檔案後,需要將檔案備份到另一個磁碟機代號中。為此,您可以在命令提示符中輸入以下的單個命令並按enter。

> xcopy C:\專案資料夾\*.* D:\備份專案資料夾\ /F /S /Y

這裡我們先不要擔心每個字母都是什麼意思,我們後面會具體介紹的。重要的一點是你可以每天在命令提示符中輸入這個命令來複制你所有的檔案。但是您可能會抗議說,在這一行中很容易輸入錯誤的內容,例如行尾斜槓後面的兩個路徑之一或其中一個字母,不管這些字元是幹什麼用的。使用Windows不是更容易嗎?我們可以開啟一個資料夾,選擇所有資料夾,右鍵單擊,選擇複製,然後開啟另一個資料夾,右鍵單擊,選擇貼上。我同意這樣做要比輸入命令簡單,但請注意,Windows的操作過程包括多個個獨立的步驟,可能需要十幾次甚至更多的滑鼠點選。

除了上面兩種方式,我們還有第三種方式,第三種方法比命令提示符和多次點選滑鼠更容易的方式。那就是使用批處理進行程式設計的方式。

批處理指令碼語言

批處理是一個通用術語,一般指的是同時執行多個作業或大量資料的行為,他與我們這裡介紹的批處理指令碼(Batch scripting)是截然不同的。

微軟在20世紀80年代早期為MS-DOS作業系統開發了批處理指令碼或程式語言,自1985年以來,它已安裝在每臺執行Windows的機器上。批處理命令本身代表了程式語言Batch的起源,但是單個命令不構成語言;語言是執行這些命令的框架。將這些命令組合到一個檔案中可以實現分支邏輯、複雜迴圈和可重用程式碼——這才是真正的語言的組成部分。

批處理有很多用途。它的命令列起源使它成為計算機或系統管理的理想語言:建立、複製、移動和刪除檔案。批處理還可以檢查和修改目錄和登錄檔,並設定計算機的環境。

一個簡單的bat檔案可以設定一些變數並執行用許多其他語言編寫的程式。批處理可以與使用者互動,顯示資訊和收集資料。檔案可以被讀、寫和修改。可以建立基本的報告,後面我們將編寫一些批處理以支援複雜的邏輯和複雜的指令碼。

在個人電腦出現之前,其他作業系統都有自己的指令碼語言,類似於批處理。Unix shell指令碼在基於Unix的作業系統上執行,JCL或作業控制語言對IBM大型機非常有用。

根據我的經驗,編碼人員對批處理的瞭解廣泛而淺薄。大多數編碼人員可以建立一個簡單的批處理應用程式,但對於更復雜的問題,本能地退回到其他語言,這些問題可以更容易地在批處理中處理。

bat檔案

儘管批處理這個術語有歧義,但大多數編碼人員都知道bat檔案。將一批命令輸入到一個批處理檔案(簡稱為bat檔案)中。因此,bat檔案是包含批處理原始碼的檔案。當一個bat檔案被執行時,它所包含的一系列命令將被執行,直到到達終止其執行的命令或到達檔案的末尾。

大多數Windows檔案在檔名末尾的點之後都有一個副檔名。現代Word文件以.docx結尾。Excel電子表格以.xlsx結尾。簡單的文字檔案通常以.txt結尾,PDF檔案以…結尾。為了區分bat檔案和其他檔案,它的副檔名必須是.bat

在Windows中,預設情況下,副檔名不會顯示在檔名之後,但我們需要它們。要顯示它們,請在Windows資源管理器的“檢視”選單下查詢顯示檔名副檔名的選項。如果不是很明顯,在網上搜尋“顯示副檔名”和你的作業系統。

你的第一個Bat檔案

讓我們建立一個bat檔案。我們右鍵單擊桌面調出上下文選單並選擇新建文字文件。將文字檔案重新命名為SaveProject.bat的檔案。名稱可以是任何對您有意義的名稱,但是檔名之後的副檔名必須從.txt更改為.bat。右鍵單擊該檔案,選擇“重新命名”,輸入新的名稱和副檔名,按“Enter”建。彈出視窗可能會警告您更改擴充套件可能會造成很大的危害。不用管他,直接選擇“是”確認即可。右鍵單擊桌面上的新檔案,選擇編輯(不是開啟)。他將在記事本中開啟以進行編輯。

我們輸入以下兩行文字:

xcopy C:\YourPath\*.* D:\YourBackUpPath\/F /S /Y
pause

將“C:\YourPath\”更改為要備份的資料夾,將“D:\YourBackUpPath\”更改為要儲存所有檔案的資料夾。若您的電腦上沒有C盤和D盤,也可將其替換為您電腦上存在的磁碟機代號名稱。

當您將來想要進行此備份時,只需執行此bat檔案。要做到這一點,你有多種選擇;一種是雙擊桌面上的圖示,另一種是右鍵單擊bat檔案,選擇“開啟”。您可能期望開啟檔案進行編輯,但它實際上執行的是bat檔案。

就是這樣,將開啟一個視窗,顯示所有複製的檔案以及它們被複制的位置。bat檔案將保持視窗開啟,直到您按下任何鍵關閉它。如果沒有這個(pause),複製仍然會發生,但是視窗可能會很快關閉,您無法知道它是否有效。

警告:

有時Windows檔案關聯分配不正確。也就是說,Word文件應該與Word相關聯並由Word開啟。同樣,bat檔案應該與執行bat檔案的Windows程式相關聯。例如,如果您的bat檔案在記事本中開啟,則具有.bat副檔名的檔案的檔案關聯被破壞。修復方法因作業系統而異。在網上搜尋“bat檔案關聯修復”以及您的作業系統,以瞭解如何解決這個問題。

幾乎任何你可以在MS-DOS命令提示符中輸入的東西都可以被編碼到一個bat檔案中,這樣它就可以很容易地重複執行。你不需要從網上下載任何東西。你需要的一切都已經在你的Windows電腦上了。

我在最後一段前面加上了“幾乎”,因為某些命令,特別是最重要的命令,在bat檔案中與命令提示符中的語法略有不同。更奇怪的是,與在命令提示符下輸入完全相同的命令相比,bat檔案中的命令偶爾會產生略有不同的輸出。

我們的目的是編寫bat檔案,而不是使用命令提示符,因此後續的所有程式碼都可以在bat檔案中工作,並且所有輸出示例都是來自bat檔案的程式碼輸出。

cmd檔案

在前面我們建立了一個副檔名為.bat的bat檔案。隨著Windows NT的釋出,微軟引入了一個非常類似的檔案,副檔名為.cmd,該檔案也包含批處理原始碼。bat檔案中的任何批處理命令都可以輸入cmd檔案。如果我們使用用.cmd副檔名重新命名前面的第一個bat檔案,並像執行bat檔案一樣執行它,業課得到相同的結果。

在計算機如何執行這兩種型別的檔案方面存在一些技術差異,但從使用者的角度來看,它們幾乎是相同的。唯一重要的區別是關於如何以及何時設定返回程式碼,即使這樣,這種差異也只在非常有限的情況下表現出來。

編輯器推薦

前面提到過,當您編輯第一個bat檔案時,它可能會在記事本中開啟。記事本是最簡單的文字檔案編輯器,但其缺乏一些有用的功能。它可以用於一個簡單的bat檔案,但在我們進一步討論之前,我必須說明需要一個更好的編輯器。我所說的編輯器是指允許您在視窗中開啟(而不是執行)bat檔案以讀取它並進行修改的實用程式。

我個人最喜歡的是Notepad++。第一次聽到這個名字時,我誤以為它是美化的記事本,但它確實很好用。命令、變數、運算子、標籤、註釋和更多我們還沒有涉及到的專案都以不同的顏色顯示,以幫助提高可讀性。大多數編輯器都有這個功能,但是如果雙擊一個變數,它不僅會突出顯示該變數,還會突出顯示檔案中該變數的所有其他例項,從而更容易發現拼寫錯誤,儘管由於Notepad++易於使用的自動完成功能,拼寫錯誤在Notepad++中並不常見。

Notepad++是可配置的。如果你發現變數的橙色有點太刺眼了,你可以把它改成焦橙色或者淡紫色。它也適用於許多其他程式語言,最重要的是,它是免費的。只要去https://notepad-plus-plus.org或在網上搜尋“notepad++下載”,點選幾下滑鼠就可以了。

UltraEdit也是一個可靠的編輯器,而Visual Studio Code正迅速成為許多編碼語言(包括批處理)非常流行的編輯器。你可以在網上找到其他一些,其中許多是免費的。下載兩個或三個並進行試驗,但無論你做什麼,都不要滿足於使用記事本。

批處理直譯器

批處理是一種指令碼語言,而不是編譯語言。編譯語言,如Java、Visual Basic和c#是用文字編寫的,但這些文字不能被執行。相反,他們通常在整合開發環境(IDE)中編寫程式,在IDE中單擊一兩個按鈕就可以執行編譯,將程式碼轉換為可執行檔案。生成的檔案根本不是人類可讀的,但它將是計算機可讀的,併為執行進行了最佳化。缺少可讀文字還有一個額外的好處,那就是對使用者隱藏了任何專有資訊。

這個編譯後的檔案下一步是執行;執行時有不同的形式,但執行時載入在計算機上,用於執行用特定語言編寫的任何可執行檔案。

作為一種指令碼語言,批處理也是用文字編寫的,但是該過程的其餘部分與編譯語言有很大的不同。他沒有編譯器,也沒有執行時;相反,批處理直譯器或cmd.exe可執行檔案可以有效地代替這兩個角色(編譯、執行)。批處理直譯器有時被稱為命令直譯器或命令列直譯器,但通常它被簡單地稱為直譯器。

直譯器執行包含文字的bat檔案。缺少中間編譯步驟確實有一些優點。因為程式碼沒有被編譯,但它也給程式設計師帶來了一些挑戰。當程式被編譯時,編譯器會捕獲語法錯誤,甚至提出如何改進程式碼的建議。例如,編譯器可以很容易地捕捉到遺漏的圓括號,這樣在IDEA中就可以在幾秒鐘內修復它。bat檔案中缺少的字元直到直譯器執行時才會被捕獲,甚至可能在它第一次執行時也不會被捕獲。透過這種方式,直譯器扮演了編譯器(效率非常低的編譯器)所扮演的角色之一。

直譯器更類似於執行時。當前面的bat檔案被開啟或執行時,會向直譯器發出一個呼叫來讀取bat檔案並逐行執行它或解釋它。這意味著bat檔案沒有針對執行進行最佳化,無論好壞,任何使用Notepad++的使用者都可以使用該程式碼。此外,bat檔案可以在任何Windows機器上執行,因為所有這些機器都裝載瞭直譯器。

所有現代的ide都有一個偵錯程式,它允許你逐行執行程式碼,分析變數,甚至可能修改它們。您可以將執行設定為停止某一行或多行。這是一個非常有用的工具,但批處理不支援除錯。bat檔案的生命週期為:寫入,執行。

一些指令碼語言(如JavaScript)通常是雙向的——原始碼可以在直譯器中執行,也可以與其他產品一起編譯成可執行檔案。這樣的事情在批處理中是不常見的。Bat檔案只能透過直譯器執行,所以理解直譯器是什麼很重要。

總結

在本文中,我們介紹了批處理指令碼語言、bat檔案、cmd檔案和直譯器。您編寫並執行了一個bat檔案(可能是您的第一個檔案),並瞭解了編輯器。現在,您已經準備好真正開始編碼了。在下一篇中,我們將學習如何使用常用的set命令為變數賦值,以及如何解析或提取這些值。我們還將熟悉批處理中廣泛使用的其他一些命令,為將來構建任何bat檔案奠定必要的基礎。

本文由部落格一文多發平臺 OpenWrite 釋出!