批處理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(只是用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版本,它們是否被“轉義”,通常取決於它們在命令行中的位置 -

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

上一篇: 批處理函數 下一篇: 批處理檔夾操作