批次處理shift運算子

2019-10-16 22:59:28

命令列引數的一個限制是它只能接受直到%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版本,它們是否被「跳脫」,通常取決於它們在命令列中的位置 -

  • 逗號(,)被替換為空格,除非它們是雙引號中的字串的一部分。
  • 分號(;)被替換為空格,除非它們是雙引號中的字串的一部分。
  • =字元有時被空格替換,而不是在雙引號中是字串的一部分。
  • 第一個正斜槓(/)只有緊跟在命令之後,才會被一個空格替換,而沒有前導空格。
  • 多個空格被替換為一個空格,除非它們是雙引號中的字串的一部分。
  • 索引標籤由一個空格替換。
  • 第一個命令列引數之前的空格將被忽略。
  • 最後一個命令列引數後面的空格將被修剪。