這些是在bat批次檔裡面常會看見的,
其他還有像是shift、for、...


echo ...  (顯示...,配合@echo off,給別人的注解)
命令>nul  (放於命令列最後,不顯示執行結果)
rem  ...  (取消...命令,給自己的注解,隱藏的)
pause ...  (暫停,...可當注解)

call other.bat  (呼叫其他批次檔插入執行)
set dircmd=/l/a/o/p  (設定環境變數,如dir cmd 預設參數)
if "%config%"=="mini" goto mini  (判斷指令 "變數"=="字串" 到mini項) (=goto %config%)
:mini


另外2篇在我blog裡DOS相關祕技是在這:
祕技真傳:DOS 指令 http://blog.pixnet.net/ca95/post/2788500

介紹Config.sys文件(與Autoexec.bat) http://blog.pixnet.net/ca95/post/3208514


當然bat 批次檔指令較詳盡的說明:
參考:MS-DOS的批次檔 (含圖結果)
http://enews.tpc.edu.tw/document/technology/2001/%E6%95%99%E7%B6%B2%E4%B8%AD%E5%BF%83%E5%8A%89%E4%BB%81%E5%AE%87%E3%80%8CMS-DOS%E6%89%B9%E6%AC%A1%E6%AA%94%E3%80%8D.htm

==========
早期在DOS系統工作下,都可能需要使用批次檔來執行電腦工作,當文字介面的系統逐漸被Windows、Unix系統(圖形介面)所取代時,現今一般使用電腦的人,可能也不是很清楚什麼是批次檔,我們今天就來介紹何謂批次檔。

批次檔是一種文字檔案(ASCII檔案),由一連串的MS-DOS命令所組成的。批次檔的命名規則與一般檔案相同,但其副檔名固定為".BAT",即"將一連串的命令"儲存在檔案中,該批次檔的指令可無限制的重覆使用,永遠得到相同的執行結果。究竟批次檔又該如何使用呢?以下介紹批次檔的常用指令。

批次檔的常用指令如下:

一、 ECHO
在正常的情況下,批次檔中的每道命令執行前都會先出現螢幕上。有了ECHO命令,就可以任意控制是否列印出命令列。
用法:在批次檔中鍵入echo on/off ,on:表示要印出命令列,off:則不印出命令列,若要禁止批次檔的命令顯示在螢幕上,則使用隱藏echo off(@ECHO OFF),用法在命令列的開頭上加上@符號
Ex:
@echo off 表示資料隱藏
echo .... 測試ECHO指令
echo .... 請稍後
echo .... 完成....

二、 代換參數
代換參數的標記是一個百分號(%)再跟著一個阿拉伯數字,最多可使用10個代換參數,這些變數的值,則由呼叫批次檔的命令所指定。
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4

三、 PAUSE:是暫停批次檔的執行。當MS-DOS執行到PAUSE時就暫時中止目前的工作,並印出下列訊息:
press any key to contunue ……
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
echo %1 %2 %3 %4
pause
echo %5 %6

四、 REM(REMark)用來在批次檔執行中顯示某些訊息,用法是在批次檔中鍵入rem,後面跟著所要顯示的字串
Ex:
@echo off
echo .... 測試代換參數指令
echo .... 請稍後
echo .... 完成.....
rem 下面指令,開始做代換參數
echo %1 %2 %3 %4
pause
echo %5 %6

五、 IF
IF命令在批次檔中用來測試特定的條件,以決定是否執行某些命令。絛件的型態分為四種:
(1) IF EXIST
此條件是用來檢查某一檔案是否存在,若存在則條件成立,便執行指定的命令
Ex:
@echo off
if exist test1.bat type test1.bat
echo 執行程式結束
(2) IF String1 = = String2(= = 表相等性的比較)
Ex:
@echo off
echo .... 測試IF指令
echo %1
if %1 == a goto first
if %1 == b goto second
if %1 == c goto three
:first
echo 執行first (a)
goto finish
:second
echo 執行second (b)
goto finish
:three
echo 執行three (c)
goto finish
:finish
(3) IF ERRORLEVEL
ERRORLEVEL是由MS-DOS所管理的一個系統變數,目的是監視所有錯誤發生的情況。(類似ErrorMessage)
(4) IF NOT
IF NOT是當測試條件不成立時才執行後面命令
Ex:
@echo off
if not exist test1.bat type test1.bat
echo 執行程式結束

六、 GOTO
GOTO命令在批次檔中用來轉移控制權,可以指示批次檔跳至某一標記(line label)由一個冒號(:)跟著字元符號所組成的;label也可使用代換變數
Ex:
goto first 或 goto %1

七、 FOR
FOR命令允許批次檔中的其他命令,可以重覆地執行
for %%a IN (file1 file2 file3) DO del %%a
虛擬變數必須以兩個百分號(%%)起頭,in後面著參數列,do後面跟著要執行的命令
Ex:
@echo off
echo .... 測試FOR指令
echo .... 請稍後
echo .... 完成.....
echo ....
for %%a IN (test_a.bat test_b.bat test_c.bat) do copy %%a prn

八、 SHIFT
SHIFT命令允許在批次檔的起動命令中,使用超過10以上的實際參數
(%0~%9)

九、 CALL
模組化的程式設計,是將一個完整的程式分割成一個個獨立的模組(module),每個模組負責一項功能
Ex:
@echo off
echo .... 測試CALL指令
echo .... 請稍後
echo %1 %2
call test_b
echo %3 %4
echo 程式模組已執行完畢 (test_a.bat)
@echo off
echo 執行test_b程式
echo 即將執行test_c .....
call test_c
echo 執行test_b程式完畢~~~ (test_b.bat)
@echo off
echo 執行test_c程式
if exist test2.bat type test2.bat
echo 執行test_c程式完畢~~~ (test_b.bat)
執行 test_a

ca95 發表在 痞客邦 PIXNET 留言(7) 人氣()


留言列表 (7)

發表留言
  • SAN
  • 請問版大~若是我要寫一個批次檔,超過"指定的日期"便不會再往下執行(就是跳離),我該怎麼寫~
    TKS
  • 可以用if指令,配合%date%日期環境變數。

    echo %date% 測試印出目前日期環境變數

    IF [NOT] string1==string2 command
    NOT 表示 Windows XP 應該只有在條件為偽時才執行命令。
    string1==string2 當指定的文字字串相符合時,則條件為真。

    如果您啟用擴充命令,IF 的變更如下:
    IF [/I] string1 compare-op string2 命令

    compare-op 可以是:
    EQU - 等於
    NEQ - 不等於
    LSS - 小於
    LEQ - 小於或等於
    GTR - 大於
    GEQ - 大於或等於

    而如果指定 /I 參數,則執行區分大小寫的字串比對。

    所以全部可以這樣下:
    if not %date% gtr 2008/12/02 dir

    意思是說:如果目前日期沒有大於2008/12/02,則執行dir命令,
    也就是超過指定的那個日期它就不會執行了。

    ca95 於 2008/12/02 16:57 回覆

  • SAN
  • 不行勒!
    我在CMD下試打了~
    if not %date% gtr 2008/12/02 dir
    竟然得到一行 '這個時候不應有 星期二。" ??
  • SAN
  • 更新一下~ 我建立一個123.bat 內容是
    if not %date% gtr 2008/12/10 dir
    結果執行下去會顯示 .... ??? 代表是??

    C:\DOCUME~1\SAN>123.bat
    C:\DOCUME~1\SAN>echo ??? 2008/12/09
    ??? 2008/12/09
    2008/12/09 was unexpected at this time.
    C:\DOCUME~1\SAN>if not ??? 2008/12/09 gtr 2008/12/10 dir
    C:\DOCUME~1\SAN>
  • 我是在XP-SP2內建的命令提示字元測試的,
    也把它寫到.bat檔做測試,
    但沒有遇到你那樣的問題耶@@!

    你可以試試 if /?
    它會有詳細的說明及用法,
    以及我之前在新Blog有寫到的這一篇:
    用if指令在bat批次檔中執行條件處理
    http://taglife.twbbs.org/244
    希望能幫上忙喔^^

    ca95 於 2009/10/12 18:14 回覆

  • SAN
  • 另外請問版大,若要下一個參數他必須我輸入一個數字認證以後,他才會繼續執行,數字是根據日期總數(例如2009/01/13 =2+0+0+9+0+1+1+3=16)或是版大有更好的建議,就是要做一個每次執行都不必須要輸入數字但數字每次都要不一樣~tks
  • 看不太懂你最後一句的問題,
    也許choice指令是你想要的東西~
    按:http://www.twbbs.net.tw/246585.html

    ca95 於 2009/01/19 04:19 回覆

  • SAN
  • 更正一下~

    另外請問版大,若要下一個參數他必須我輸入一個數字認證以後,他才會繼續執行,數字是根據日期總數(例如2009/01/13 =2+0+0+9+0+1+1+3=16)或是版大有更好的建議,就是要做一個每次執行都必須要輸入數字但數字"每次都要不一樣"~tks
  • 你可以參考我前面貼的那一篇看看。

    ca95 於 2009/01/20 18:07 回覆

  • Johnny
  • 請求幫忙

    我有一大堆從"00000"到"99999"的數字檔名就是沒有附檔名.如何用指令找到"00000"執行後自動找"00001"如果找不到再找"00002"以下類推..非常感謝!
  • 可是試試看-
    IF [NOT] EXIST filename command
    EXIST filename 如果指定的檔名存在時,則條件為真。

    例如-
    if exist 00001 00001
    if exist 00002 00002
    ... ...

    不過你要知道用什麼東西執行它,
    例如如果是文字檔用內建記事本開啟它-
    if exist 00003 notepad.exe 00003

    圖片檔剛找到內建的Windows Picture and Fax Viewer
    圖片和傳真檢視器 的執行方式-
    rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen DOS路徑檔名

    ca95 於 2009/10/12 19:52 回覆

  • 訪客
  • 日期檢查 用 IF not %date% gtr 2013/10/09 dir
    Windows 7 or later 如果會出現 '這時候不應有 週三' 的訊息
    可以加上取前10個字元來做比較
    IF not %date:~0,10% gtr 2013/10/10 dir