Windows 批處理腳本指南: 開始

Getting Started with Windows Batch Scripting


Windows批處理腳本兼容性非常好 - 它適用于任何現(xiàn)代Windows機器。 你可以在任何一臺現(xiàn)代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文本,所以可以使用任何文本編輯器或文字處理軟件。很少有編輯器能做到語法高亮,或者關(guān)鍵字的支持,所以記事本已經(jīng)足夠好了,它預(yù)裝在每一臺Windows系統(tǒng)上。

Viewing Batch Files


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

Batch File Names and File Extensions


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

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

批處理文件命名另外一個需要注意的是,命名避免與系統(tǒng)內(nèi)置的命令或者一些常用的軟件相同。例如,避免使用 ping.cmd,因為系統(tǒng)中有個 ping.exe的可執(zhí)行文件。如果運行ping命令,你真正想要運行的是 ping.cmd, 但可能無意調(diào)用的是 ping.exe, 這樣就顯得很混亂。我可能會將腳本命名為 RemoteHeartbeat.cmd 或者類似的東西為腳本的名稱添加一些上下文,避免與其他可執(zhí)行文件命名沖突。當(dāng)然,在特殊情況下,不得不修改 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 部分中學(xué)習(xí)如何處理這個問題)。

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

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

其他的一些技巧:

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

Comments


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

REM This is a comment!

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

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

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

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

Silencing Display of Commands in Batch Files


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

@ECHO OFF

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

ECHO ON

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

Debugging Your Scripts


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

參考資料


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評論 3 426
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 72,315評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評論 1 327
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,882評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 41,189評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,388評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,613評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,112評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 48,334評論 2 377