這些是在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

請問版大~若是我要寫一個批次檔,超過"指定的日期"便不會再往下執行(就是跳離),我該怎麼寫~ 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命令, 也就是超過指定的那個日期它就不會執行了。
不行勒! 我在CMD下試打了~ if not %date% gtr 2008/12/02 dir 竟然得到一行 '這個時候不應有 星期二。" ??
更新一下~ 我建立一個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 希望能幫上忙喔^^
另外請問版大,若要下一個參數他必須我輸入一個數字認證以後,他才會繼續執行,數字是根據日期總數(例如2009/01/13 =2+0+0+9+0+1+1+3=16)或是版大有更好的建議,就是要做一個每次執行都不必須要輸入數字但數字每次都要不一樣~tks
看不太懂你最後一句的問題, 也許choice指令是你想要的東西~ 按:http://www.twbbs.net.tw/246585.html
另外請問版大,若要下一個參數他必須我輸入一個數字認證以後,他才會繼續執行,數字是根據日期總數(例如2009/01/13 =2+0+0+9+0+1+1+3=16)或是版大有更好的建議,就是要做一個每次執行都必須要輸入數字但數字"每次都要不一樣"~tks
你可以參考我前面貼的那一篇看看。
我有一大堆從"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路徑檔名
日期檢查 用 IF not %date% gtr 2013/10/09 dir Windows 7 or later 如果會出現 '這時候不應有 週三' 的訊息 可以加上取前10個字元來做比較 IF not %date:~0,10% gtr 2013/10/10 dir