Windows 批處理腳本指南: 開始

Getting Started with Windows Batch Scripting


Windows批處理腳本兼容性非常好 - 它適用于任何現代Windows機器。 你可以在任何一臺現代Windows機器上創(chuàng)建和修改批處理腳本。 這些工具從盒子里出來:Windows 命令提示符和一個像 Notepad.exe 這樣的文本編輯器。 這絕對不是最好的shell腳本語言,但它能完成工作。

Launching the Command Prompt


使用快捷鍵 Windows Logo Key + R, 輸入 cmd.exe 然后按回車鍵,運行 Windows 命令提示符。這比從開始菜單找到命令提示符要快的多。

Editing Batch Files


批處理文件的通用文本編輯器是記事本(Windows Logo Key + R, 輸入 notepad.exe, 回車)。由于批處理文件只是ASCII文本,所以可以使用任何文本編輯器或文字處理軟件。很少有編輯器能做到語法高亮,或者關鍵字的支持,所以記事本已經足夠好了,它預裝在每一臺Windows系統(tǒng)上。

Viewing Batch Files


我堅持使用記事本查看批處理文件。在Windows資源管理器(又名“我的電腦”)中,你可以記事本中查看批處理文件,方法是右鍵單擊該文件并從文菜單中選擇“編輯”。如果你想在命令提示符窗口中查看文件內容,可以使用DOS命令,例如 TYPE myscript.cmd 或者 MORE myscript.cmd或者 EDIT myscript.md。(在 Windows 10 中,EDIT 不可用)

Batch File Names and File Extensions


假設你使用的是Windows XP 或者更新的版本,我建議保存的批處理文件,文件擴展名為 .cmd。 一些過時的Windows版本使用 .bat,因此我推薦更為現代的 .cmd 來避免 .bat 帶來的副作用。

使用.cmd文件擴展名,你可以使用你喜歡的文件名。建議文件名中避免使用空格,空格在腳本中令人頭疼。有個簡單辦法,可以避免使用空格,使用 Pascal 命名法則來命名(例如: HelloWorld.cmd 代替 Hello World.cmd)。也可以使用標點符號,比如 . 或者 - (例如: Hello.World.cmd, Hello-world.cmd, Hello_World.cmd)。

批處理文件命名另外一個需要注意的是,命名避免與系統(tǒng)內置的命令或者一些常用的軟件相同。例如,避免使用 ping.cmd,因為系統(tǒng)中有個 ping.exe的可執(zhí)行文件。如果運行ping命令,你真正想要運行的是 ping.cmd, 但可能無意調用的是 ping.exe, 這樣就顯得很混亂。我可能會將腳本命名為 RemoteHeartbeat.cmd 或者類似的東西為腳本的名稱添加一些上下文,避免與其他可執(zhí)行文件命名沖突。當然,在特殊情況下,不得不修改 ping 的默認行為,那這個命名的建議就無所謂了。

Saving Batch Files in Windows


默認情況下,記事本會嘗試將所有文件都保存為純文本文件。要使記事本保存擴展名為 .cmd 的文件,需要將“保存類型”更改為“所有文件(.)” 如下圖所示。

保存文件名為 `hellowrold.cmd`

補充:在截圖中使用了一個快捷方式,后續(xù)好介紹更多。通過命名 %USERPROFILE%\HelloWorld.cmd 把文件保存到 用戶資料 文件下。%USERPROFILE% 是Windows系統(tǒng)的一個環(huán)境變量,它指向你的 用戶目錄,如:C:\Users。在較新的Windows系統(tǒng)上,用戶資料 指的是 C:\Users\<用戶名>。這能夠節(jié)約一點時間,因為命令提示符默認的工作目錄就是 C:\Users\<用戶名>。這樣運行HelloWorld.cmd 腳本就不需要切換目錄。

Running your Batch File


在Windows中運行批處理文件的簡單方法是雙擊Windows資源管理器(又名“我的電腦”)中的批處理文件。然而這樣操作,命令提示符不會給你多少時間看到輸出或者任何錯誤,腳本運行完成后就立即退出,你只能看到一個窗口一閃而過。(我們將在Part 10 – Advanced Tricks 部分中學習如何處理這個問題)。

運行新編寫的腳本,我們需要在現有的命令窗口中運行它。對于新手來說,最簡單的方法就是把腳本拖放在命令提示窗口中。命令提示符將在命令行中輸入腳本的完整路徑,并包含空格路徑用雙引號括起來(如果不包含空格,則不會),如下圖所示。

將包含空格的路徑用引號括起來

其他的一些技巧:

  • 通過向上鍵向下鍵來瀏覽之前運行過的命令。
  • 像這樣來運行腳本:%COMPSPEC% /C /D "C:\Users\User\SomeScriptPath.cmd" Arg1 Arg2 Arg3 這樣會啟動一個新的命令提示符,并在這個進程中運行腳本。 /C 的意思是在腳本運行完成后退出子進程。/D 是禁止所有自動運行的腳本。這樣做的原因是可以阻止命令提示窗口自動關閉,如果我寫的腳本或者調用的腳本中調用了 EXIT 命令。EXIT 命令會自動關閉命令提示符窗口,除非是從子命令提示符進程中調用 EXIT。

Comments


官方的注釋方式是使用 REM (Remark) 關鍵字。

REM This is a comment!

還有一種經常被忽略掉的高級用法,使用 ::,兩個冒號。

:: This is also a comment too! (usually!!)

多數的高級作者發(fā)現,:: 相比 REM 能減少注意力分散,但是注意,有幾個地方 :: 會導致錯誤。

比如,一個 for 循環(huán)中使用 :: 就會導致錯誤。如果有這種情況,只需要換回 REM 即可。

Silencing Display of Commands in Batch Files


批處理文件中的第一個非注釋行,通常是一條關閉輸出的命令。

@ECHO OFF

@ 是一個特殊的操作符,用于抑制命令行的打印。一旦我們關閉了輸出,在后續(xù)的腳本命令中就不再需要 @ 操作符了。
可以使用以下命令恢復打印:

ECHO ON

當腳本退出時,命令提示符會自動將ECHO恢復到它以前的狀態(tài)。

Debugging Your Scripts


批處理文件涉及大量的試驗和錯誤編碼。我不知道有什么真正的Windows批處理腳本調試器。更糟的是,我也不知道如何將命令處理程序的輸出設置成詳細狀態(tài),以幫助解決腳本問題(這是Unix/Linux腳本的常用技術。)。使用 ECHO 命令打印自定義的臨時(ad-hoc[1])調試消息是唯一的選擇。高級腳本編寫者可以通過一些技巧來有選擇地打印調試消息,我更喜歡在腳本運行正常時刪除調試/檢測代碼。

參考資料


  1. Ad hoc是拉丁文常用短語中的一個短語。這個短語的意思是“特設的、特定目的的(地)、即席的、臨時的、將就的、專案的”。 ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容