命令行參數的一個限制是它只能接受直到%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版本,它們是否被“轉義”,通常取決於它們在命令行中的位置 -
- 逗號(
,
)被替換為空格,除非它們是雙引號中的字串的一部分。 - 分號(
;
)被替換為空格,除非它們是雙引號中的字串的一部分。 =
字元有時被空格替換,而不是在雙引號中是字串的一部分。- 第一個正斜杠(
/
)只有緊跟在命令之後,才會被一個空格替換,而沒有前導空格。 - 多個空格被替換為一個空格,除非它們是雙引號中的字串的一部分。
- 選項卡由一個空格替換。
- 第一個命令行參數之前的空格將被忽略。
- 最後一個命令行參數後面的空格將被修剪。