想象一下名为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%
但它不会将结果表达式视为变量引用。
答案 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%