2017-04-20 132 views
0

想象一个名叫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% 

但它不会把得到的表达式作为变量引用。

回答

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

OK,我已经想通了:

的关键是使用“设置延迟扩张”的把戏。 还有一个使用“呼叫集”而不是上述的技巧,但我认为如果我使用它,下一个在我之后的人将不知道我想做什么,并可能陷入困境。

该脚本可以通过添加修复!各地,我们要强行进入变量名,像这样的参考:

@echo off 
setlocal EnableDelayedExpansion 

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

set Choice=!%1! 

echo %Choice%