如何对像 %%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"
)
我正在尝试制作一个从另一个批处理文件调用的批处理文件,但变量不起作用,所有结果都是“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"
)