批處理指令碼 - 使用 SHIFT 運算子



命令列引數的限制之一是它只能接受最多 %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 命令),導致 %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 版本、它們是否“轉義”以及通常取決於它們在命令列中的位置 -

  • 逗號 (",") 將被空格替換,除非它們是雙引號中字串的一部分。

  • 分號 (";") 將被空格替換,除非它們是雙引號中字串的一部分。

  • "=" 字元有時會被空格替換,但如果它們是雙引號中字串的一部分則不會。

  • 第一個正斜槓 ("/") 僅在它緊跟在命令後面且前面沒有空格時才會被空格替換。

  • 多個空格將被單個空格替換,除非它們是雙引號中字串的一部分。

  • 製表符將被單個空格替換。

  • 第一個命令列引數之前的空格將被忽略。

  • 最後一個命令列引數之後的空格將被修剪。

batch_script_functions.htm
廣告

© . All rights reserved.