批处理脚本 - 使用 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

Then following will be the output.

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

Then following will be the output.

a 
b
c
d
e
f
h
i
j

注意

批处理文件会忽略命令行中的某些字符,具体取决于 DOS 版本、它们是否"转义",并且通常取决于它们在命令行中的位置 −

  • 逗号 (",") 被空格替换,除非它们是双引号中字符串的一部分。

  • 分号 (";") 被空格替换,除非它们是双引号中字符串的一部分。

  • "=" 字符有时会被空格替换,但如果它们是双引号中字符串的一部分,则不会。

  • 仅当第一个正斜杠("/")紧跟在命令后面且没有前导空格时,才会用空格替换。

  • 多个空格将替换为单个空格,除非它们是双引号中字符串的一部分。

  • 制表符被单个空格替换。

  • 第一个命令行参数之前的前导空格将被忽略。

  • 最后一个命令行参数后面的尾随空格被修剪。

❮ batch_script_functions.html