如何在Batch Scripting中引用变量?

时间:2017-04-20 16:02:46

标签: batch-file cmd

想象一下名为batch.bat的脚本,调用如下:

batch.bat Two

该脚本包含:

set One=1
set Two=2
set Three=3

set Choice=%1

echo %Choice%

但我希望回复2,而不是Two

我可以采用什么样的优雅方式来做到这一点?我想过if %Choice%=One, etc.,但我的实际脚本比提供的示例复杂一点。

编辑:我也尝试过:

set percent=%%
echo %percent%%Choice%%percent%

但它不会将结果表达式视为变量引用。

2 个答案:

答案 0 :(得分:4)

@echo off
setlocal EnableDelayedExpansion
set one=1
set c=%1
echo delayed expansion and variable:    !%c%!
echo delayed expansion and paramr:  !%1!
call echo using call and variable:  %%%c%%%
call echo using call and param:     %%%1%%

我个人更喜欢延迟扩展方法,但有时候有理由寻找替代方案。

答案 1 :(得分:1)

好的,我已经弄清楚了:

关键是使用"设置延迟扩展"特技。 使用"呼叫集"还有一个技巧。而不是上面但我认为如果我使用它,那么在我之后的下一个人不会知道我想要做什么并可能遇到麻烦。

脚本可以通过添加!!围绕我们想强制进入变量名称的引用,如下所示:

@echo off
setlocal EnableDelayedExpansion

set One=1
set Two=2
set Three=3

set Choice=!%1!

echo %Choice%