【问题标题】:How to use delayed expansion on a variable like %%a or %1?如何对 %%a 或 %1 等变量使用延迟扩展?
【发布时间】:2021-11-17 15:39:03
【问题描述】:

我正在尝试创建一个从另一个批处理文件调用的批处理文件,但变量不起作用,所有结果都是“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 的结果相同

【问题讨论】:

标签: batch-file cmd indirection delayedvariableexpansion


【解决方案1】:

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

使用调用方法

@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"
)

【讨论】:

  • 两者都有效,但在我的具体情况下,这个效果更好(更有效)
【解决方案2】:

您可以使用call 强制执行另一个级别的间接。它会在评估之前将%%1 扩展为%1

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

另请参阅此处:Batch-Script - Iterate through arguments

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2018-03-06
    • 2016-03-02
    • 1970-01-01
    相关资源
    最近更新 更多