如何对像 %%a 或 %1 这样的变量使用延迟扩展?

How to use delayed expansion on a variable like %%a or %1?

我正在尝试制作一个从另一个批处理文件调用的批处理文件,但变量不起作用,所有结果都是“a”,而预期结果是 option1=a, option2=b等

下面是演示问题的代码:

call temp.bat a b c d e f g h i j k l m n o p q r s t e u v w x y z
pause
exit

和 temp.bat:

set Number=0
for %%a in (%*) do set /a Number+=1

for /l %%a in (1,1,%Number%) do (
    set option%%a=%1
    shift
)
exit /b

我试过 !%1! 结果为空; %%1% 结果为“%1”; %1% 与使用 %1

的结果相同

您可以使用 call 强制另一个间接级别。它会在评估

之前将%%1扩展到%1
for /l %%a in (1,1,%Number%) do (
    call set option%%a=%%1
    shift
)
  • Batch number variable setter
  • BAT-file: variable contents as part of another variable
  • How can I pass a variable name as part of a parameter to a batch file and then use it?

另请参阅此处的备选方案:Batch-Script - Iterate through arguments

您可以使用一条 FOR 命令来执行此操作,这样效率会更高。

使用 CALL 方法

@echo off

set Number=0
for %%a in (%*) do (
    set /a Number+=1
    call set "option%%Number%%=%%a"
)

使用延迟扩展

@echo off
setlocal enabledelayedexpansion
set Number=0
for %%a in (%*) do (
    set /a Number+=1
    set "option!Number!=%%a"
)