命令列引數的一個限制是它只能接受直到%9的引數。 下面來舉一個限制的例子。
範例
@echo off
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9
echo %10
如果上面的程式碼儲存在一個名為test.bat
的檔案中,並且該檔案執行為 -
test.bat a b c d e f g h i j
接下來將是輸出 -
a
b
c
d
e
f
h
i
a0
從上面的輸出中可以看出,應該顯示為「j」
的最終值顯示為a0
。 這是因為沒有引數被稱為%10
。
通過使用SHIFT
運算子可以避免此限制。 在批次處理檔案處理完第一個引數之後,可以將它們SHIFT(只是用SHIFT
命令插入一行),結果是%1
得到值b
,%2
得到值c
,等等,直到%9
, 現在得到值j
。繼續這個過程,直到至少%9
為空。
我們來看一個如何使用SHIFT
運算子來克服命令列引數限制的例子。
範例
@ECHO OFF
:Loop
IF "%1"=="" GOTO Continue
echo %1%
SHIFT
GOTO Loop
:Continue
如果上面的程式碼儲存在一個名為test.bat
的檔案中,並且該檔案執行為 -
test.bat a b c d e f g h i j
如下輸出結果 -
a
b
c
d
e
f
h
i
j
注意
命令列中的某些字元被批次處理檔案忽略,具體取決於DOS版本,它們是否被「跳脫」,通常取決於它們在命令列中的位置 -
,
)被替換為空格,除非它們是雙引號中的字串的一部分。;
)被替換為空格,除非它們是雙引號中的字串的一部分。=
字元有時被空格替換,而不是在雙引號中是字串的一部分。/
)只有緊跟在命令之後,才會被一個空格替換,而沒有前導空格。