變數

設定變數

批次檔使用的變數就是作業系統的環境變數,一般來說都視為字串變數,而且是是全域變數,我們可以透過下面的指令觀察有哪些環境變數。

set

設定變數時,一樣使用 set 指令,注意等號左右不能有空白

set myname=Peter

若設定的變數代表路徑時,因為路徑中可能包含空白字元,建議以雙引號含括起來較好,單純顯示沒問題,但在命令列解析時,因為會以空白當作參數分隔,若沒有用雙引號時,會被分開當成2個參數處理,造成錯誤。

set ProgramPath="c:\Program Files (x86)"

取用變數

取用變數時,則需在變數前後加上%

echo %myname%

取消變數

取消變數時,只需依照設定變數的方式,但值是空白即可

set var=

變數的運算

set 使用 /a 參數,可使後面的敘述成為運算式

set var=6
set /a var+=3

需注意的是,若變數的值為08或09的時候,會被視為一個錯誤的8進位而其值為0,影響後續的計算

set var=08
set /a var+=3
set var=09
set /a var+=3

輸入提示

set 使用 /p 參數,等號(=)開始到冒號(:)結束的一段文字將視為輸入的提示

@echo off
:menu
echo 1.dir
echo 2.dir /w
echo 0.離開
set /p id=請輸入功能代碼:
if %id%==1 goto one
if %id%==2 goto two
if %id%==0 goto zero
:one
dir
goto menu
:two
dir /w
goto menu
:zero

字串的擷取

批次檔也可以像一般程式語言一樣,做到從字串的第n個位置開始擷取m個字元這件事

步驟 %date% %date:~0,4%
說明 當下日期變數 變數從第0位開始取4碼 1
2015/10/17 週六 2015

上述說明的程式碼如下

set today=%date:~0,4%/%date:~5,2%/%date:~8,2%
echo %today%

1字串擷取符號說明

  1. 冒號(:)
  2. 波浪符號(~)
  3. 開始位置(從0開始)
  4. 逗號(,)
  5. 擷取幾個字元

字串的取代

批次檔也可以進行字串的取代,方式跟字串的擷取有點類似,下面的範例說明如何將(140.128.71.1)替換為[140.128.71.1]。

步驟1 %var% %var:(=[%
說明 var變數 將 ( 替換為 [ 2
(140.128.71.1) [140.128.71.1)
步驟2 %result% %result:)=]%
說明 result變數(存放前一步驟的結果) 將 ) 替換為 ] 2
[140.128.71.1) [140.128.71.1]

上述說明的程式碼如下

@echo off
set var=(140.128.71.1)
set result=%var:(=[%
set result=%result:)=]%
echo %result%
Pause

2字串取代符號說明

  1. 冒號(:)
  2. 字串中想要被替換的子字串
  3. 等號(=)
  4. 替換後的子字串

其他的進階用法,請輸入 set /? 來獲得。

變數延遲展開

因為批次檔的命令解譯器,會針對每一行敘述中的變數進行預處理(預先賦值)的關係,因此造成取值的結果仍是前一個變數的狀態,必須開啟變數延遲展開(setlocal enabledelayedexpansion),才能如同一般程式語言循序處理變數,這個特性造成很多人無法正確駕馭批次檔的變數行為,甚為可惜。

以下會舉出幾個範例,先說明敘述中變數優先賦值的情形

請先看for 迴圈第一段的說明範例,其餘待續...

results matching ""

    No results matching ""