天天看點

DOS批處理檔案

    DOS下的可執行檔案有三種,分别是EXE,COM和BAT。其中,EXE和COM檔案都是二進制形式的,隻有BAT檔案是文本形式的,可以直接閱讀。是以,BAT檔案和以上二進制可執行檔案相比,内容要簡單的多。這些檔案内包含着DOS指令的集合,通常叫作批處理檔案。批處理檔案的組成雖然比較簡單,但其用處非常大,使用也比較廣泛。比如每次都執行一些相同的指令,您一定會覺得非常麻煩,而放在批處理檔案中執行的話則輕松得多。AUTOEXEC.BAT就是一個特殊的批處理檔案,它在DOS的啟動時自動運作,在系統的配置中發揮着非常大的作用。是以,要學好DOS,就要學好批處理檔案。下面介紹批處理檔案的指令及其使用。 

DOS自帶的批處理指令:

@:将這個符号放在批檔案中其它指令的前面,運作時将不顯示指令本身。

如@ECHO OFF指令就在批檔案首經常用到。

CALL:從一個批檔案中調用另一個批檔案,調用完後繼續執行原來的批檔案。

用法:CALL [批檔案名]

注:也可以使用COMMAND /C指令完成同樣的操作。

CHOICE:選擇指令。這是一個DOS外部指令,但它主要用在批檔案中。

CHOICE指令執行後将提示可選擇的項目,這時通過一個按鍵來選則。

用法:CHOICE:[/C[:]按鍵表] [/N] [/S] [/T[:]選擇值,秒數] [顯示文本]

其中,/C表示可選則的按鍵,/N表示不要顯示提示資訊,/S表示大小寫字元敏感方式,/T表示若在批定的時間内沒有選則的話,自動執行/C中定義的某個選擇值。顯示文本是CHOICE指令執行時的提示資訊。選擇結果将用ERRORLEVEL值來表示。

ECHO:顯示指定的資訊。通常顯示在螢幕上。

如ECHO Hello将在螢幕上顯示Hello的字樣。

另外,ECHO ON|OFF用來設定在批檔案執行時是否顯示指令本身。而ECHO OFF與@的意思一樣,但它是一個單獨的指令,而不能像@那樣放在其它指令之前。

FOR:對于指定的檔案運作相應的指令。

大家知道,DOS下許多指令支援通配符,如?和*,可以一次指定一批檔案,非常友善。然而,并非所有的DOS指令都支援通配符,如TYPE(檔案内容顯示指令)就不支援。有了FOR指令就沒有關系了,利于它可以使TYPE指令可以一次顯示多個檔案。

用法:FOR %變量名 IN (檔案集) DO 指令 [指令參數]

注:以上是FOR指令的固定形式,IN和DO的位置必須正确,否則将提示文法錯誤。

如FOR %F IN (*.*) DO TYPE %F指令就可以實作TYPE指令一次顯示多個檔案。

注:%F是變量名,也可用%G等代替,但前後必須一緻。在批檔案中用%%F代替。

GOTO:轉到批檔案内部的某個标号下執行。

大家知道,在程式設計中往往需要重複或跳轉到某個地方繼續執行,如BASIC語言中的GOTO指令。批檔案中的GOTO指令也可以完成類似的功能。

用法:GOTO [标号名]

其中,标号名是可以随意設定的,如Hello等。設定标号用“:”符号,如“:Hello”,這時用GOTO Hello指令将轉到“:Hello”所在的位置繼續執行批檔案。

IF:條件判斷指令。這是一項很有用的批處理指令。

用法1:IF [NOT] EXIST 檔案名 指令 [指令參數]

意義:如果[不]存在某個檔案将執行某個指令。

用法2:IF [NOT] ERRORLEVEL 錯誤傳回代号 指令 [指令參數]

意義:如果錯誤傳回代号[不]大于或等于指定的代号将執行某個指令。

其中,ERRORLEVEL表示錯誤傳回代号,很有用。對于很多DOS指令,由于執行的結果不同(如執行成功,執行失敗,或被使用者中斷等),這些指令會傳回不同的代号,以表示不同的結果。IF ERRORLEVEL指令就根據這個不同結果而産生的不同代号來執行不同的指令,通常用在某條指令之後。如IF ERRORLEVEL 1 ECHO OK!表示如果目前的錯誤傳回代号大于或等于1時将在螢幕上顯示“OK!”的字樣。

用法3:IF [NOT] 字元串1==字元串2 指令 [指令參數] 

意義:當字元串1和字元串2[不]相等的時候執行某個指令。

PAUSE:暫停批檔案的執行,并顯示“按任意鍵繼續”的字樣。

REM:添加注解。用于增加檔案可讀性,将不被執行。也可以用::來代替。

SHIFT:在批檔案中改變可替換參數的位置。

可替換參數是一種特殊的參數,隻能用在批檔案中。這些參數是由使用者在執行批處理指令時輸入的。比如,我們執行DIR /S /W指令,其中DIR是指令名,/S和/W是它的執行參數。在批檔案中,這些指令參數将被分别賦予到可替換參數中,如/S就成的%1,/W就可了%2,以至類推,而指令本身則被賦予%0中。批檔案就是利用可替換參數對執行時輸入的參數來進行操作的。比如現在有個批處理檔案叫MYFILE.BAT,在指令行下執行MYFILE.BAT YES,于是%0的值就是MYFILE.BAT,%1的值就是“YES”,可以在此批檔案中用IF等指令判斷出%1等參數的值,然後根據這些值的不同執行不同的操作,如IF "%1"=="YES" GOTO YES。

SHIFT指令不帶任何參數,執行結果是将%0的值換成原%1的值,而原%1的值變成的原%2的值,以此類推。注意它的不可逆轉性。因為批處理檔案執行時的運作參數可能很多,可能會超過10個,而可替換參數隻能從%0到%9,若想取得%9以後的參數值,隻能使用SHIFT指令。這時,整個參數列将向前推。

    以上是DOS的自帶批處理指令,可以看出,這些指令是非常少的,若要編寫較複雜的程式,用以上的指令顯然不可能實作。這時就需要其它實用的批處理工具了,著名且實用的有TESTIF,STRING,ASET,BATCHMAN,WBAT等,均可在“DOS軟體分類下載下傳”中的“腳本工具”中下載下傳。在批處理檔案中使用以上的工具可以實作非常強大的功能,甚至可以完成許多進階語言程式的功能。是以,如果您想編者按寫批處理檔案的話,它們是您不錯的選擇,不僅有詳細的文檔,而且還在不斷發展中。

    下面就要談批處理檔案的制作了。其實制作批處理檔案并不難,隻要掌握了方法就行了。随着您操作次數的增多,您會覺得越來越容易的。

    首先使用一個文本編輯器,如DOS自帶的EDIT指令或其它的編輯工具,如PEDIT等建立一個空白檔案(當然,用COPY CON指令直接建立也行),然後在其中根據您想完成的功能輸入批處理指令。如果您隻是想執行一些的DOS指令的集合,則按順序在每行輸入一個DOS指令就行了。但如果您是想完成一些更複雜的操作,就需要以上的批處理指令或上述的批處理工具了。

    以下是我原來所編的一個從1%慢慢增加到100%的批處理小程式,大家可以用作參考,以編寫自己的程式。

@echo off

break off

cls

set c=0

writext 10 1 Wait...

be delay 4

:loop

writext 10 9 %c%%%completed.

count c

if not %c%==101 goto loop

echo.

set c=

kpush /f

break on

    其中,我用到了WRITEXT,COUNT,BE和KPUSH,這些都是批處理工具。WRITEXT是ECHO的增強工具,可以自定義顯示的效果。COUNT是變量的計算工具,如原來C的值為1,執行COUNT C後C的值就為2。BE是個強大的批處理增強工具,在Norton Utilties 8.0中帶有。KPUSH是鍵盤緩沖工具。

    總之,利用批處理指令和批處理增強工具,我們可以編出許多強大的批處理檔案來,大家不妨一試。