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