在括号内移动参数

让我们有以下 example.bat 并用参数 123 调用它:

@echo off

(
    shift
    shift
    echo %1
)

由于变量扩展将在到达末端括号上下文后发生变化,因此输出将为:

1

因为当在括号内移动来访问参数时,这可能是一个问题,你需要使用调用:

@echo off

(
    shift
    shift
    call echo %%1
) 

现在输出将是 3。使用 CALL 命令(这将导致额外的变量扩展)使用此技术,参数访问也可以参数化:

@echo off

set argument=1

    shift
    shift
    call echo %%%argument%

延迟扩张:

@echo off
setlocal enableDelayedExpansion
set argument=1

    shift
    shift
    call echo %%!argument!

输出将是

3