批处理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版本,它们是否被“转义”,通常取决于它们在命令行中的位置 -

  • 逗号(,)被替换为空格,除非它们是双引号中的字符串的一部分。
  • 分号(;)被替换为空格,除非它们是双引号中的字符串的一部分。
  • =字符有时被空格替换,而不是在双引号中是字符串的一部分。
  • 第一个正斜杠(/)只有紧跟在命令之后,才会被一个空格替换,而没有前导空格。
  • 多个空格被替换为一个空格,除非它们是双引号中的字符串的一部分。
  • 选项卡由一个空格替换。
  • 第一个命令行参数之前的空格将被忽略。
  • 最后一个命令行参数后面的空格将被修剪。

上一篇: 批处理函数 下一篇: 批处理文件夹操作