冰楓論壇

標題: 撰寫 windows 的 batch 檔 [打印本頁]

作者: whitefox    時間: 2023-6-1 00:22
標題: 撰寫 windows 的 batch 檔
早期在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

你到DOS模式下...
c:\>copy con TEST.BAT (TEST只是舉例檔名你可以自己想一個"英文")
就可以開始寫了
以下我張貼一些規則喔

批次檔介紹:

*DOS指令的特色:一個口令,一個動作

*批次檔(Batch file)的定義:由一個或一個以上的dos指令所組成的檔案,它是一個可以直接在dos下直接執行的執行檔.當執行一個批次檔之時,dos會將該批次檔內的所有指令依序執行,故可免重覆輸入相同的指令,節省時間.

*編輯工具: DOS Editor 或記事本

批次檔的規格

*須為純文字.每項指令須在一行(最多127字)內

*要以.bat為副檔名.主檔名須避免與dos指令同名----如Copy/Del/Exit.bat等等

*批次檔須用DOS指令加特定語次寫成:

call choice echo

for…in…do goto if(if exit)(if not exist)

pause rem shift

*批次檔的主檔名與.com或.exe的主檔名相同時,就要鍵入全名

*批次檔執行中,按Ctrl+C或Ctrl+Break可終止

批次檔的相關指令:

*ECHO----On/Off----文字敘述顯示與否?

*PAUSE----暫停執行

*CALL-----呼叫另一批次檔

*REN-------在批次檔加上註解文字,增加可讀性

批次檔是一串指令,例如:
C:\when.bat
--sof--
date
time
--eof--
執行它:
--start--
C:\>when

C:\>date
現在日期是: 11/09/2005 Sun
輸入新日期: (dd-mm-yy)

C:\>time
現在時間是: 19:21:56.72
輸入新時間:

C:\>
--end--
執行它=逐行在提示號後鍵入。
注意執行時會顯示指令行
你可用@去隱藏它
C:\when.bat
--sof--
@date
@time
--eof--
執行它:
--start--
C:\>when
現在日期是: 11/09/2005 Sun
輸入新日期: (dd-mm-yy)
現在時間是: 19:27:58.49
輸入新時間:

C:\>
--end--
你甚至可用@echo off來代替所有的@:
C:\when.bat
--sof--
@echo off
date
time
--eof--
執行它:
--start--
C:\>when
現在日期是: 11/09/2005 Sun
輸入新日期: (dd-mm-yy)
現在時間是: 19:30:41.05
輸入新時間:

C:\>
--end--
goto可以跳到batch的某位置:
C:\go.bat
--sof--
@echo off

:start
echo Start!
goto 4

:1
echo 1
goto 3

:2
echo 2
goto 5

:3
echo 3
goto end

:4
echo 4
goto 2

:5
echo 5
goto 1

:end
--eof--
執行…
--start--
C:\>go
Start!
4
2
5
1
3

C:\>
--end--
echo的用途是打出一些訊息
if可以做一些條件性的工作
C:\test.bat
--sof--
@echo off
if exist when.bat echo When!
--eof--
執行……
--start--
C:\>test
When!

C:\>
--end--
把剛才的when.bat刪掉
--start--
C:\>del when.bat

C:\>test

C:\>
--end--
沒有訊息出現了。




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓