批处理脚本 - 使用 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 版本、它们是否"转义",并且通常取决于它们在命令行中的位置 −
逗号 (",") 被空格替换,除非它们是双引号中字符串的一部分。
分号 (";") 被空格替换,除非它们是双引号中字符串的一部分。
"=" 字符有时会被空格替换,但如果它们是双引号中字符串的一部分,则不会。
仅当第一个正斜杠("/")紧跟在命令后面且没有前导空格时,才会用空格替换。
多个空格将替换为单个空格,除非它们是双引号中字符串的一部分。
制表符被单个空格替换。
第一个命令行参数之前的前导空格将被忽略。
最后一个命令行参数后面的尾随空格被修剪。