批处理中如何获取由变量拼接字符串生成名称的变量值?
批处理间接变量引用解决方案
你当前的写法只能得到拼接后的变量名,原因是批处理默认会预解析整个命令行,执行前就完成了变量展开,无法直接解析动态生成的变量名。以下是两种可行的解决方法:
方案1:启用延迟扩展(推荐)
延迟扩展是批处理处理动态变量的常用方式,步骤如下:
- 在主批文件开头开启延迟扩展:
setlocal enabledelayedexpansion
- 导入配置文件中的变量(假设配置文件名为
fruit_config.bat):
call fruit_config.bat
- 获取用户输入并间接展开目标变量:
set /p fruit="Please input a fruit: " :: 直接拼接并输出对应值 echo !%fruit%_colour! :: 或者先存储变量名再输出(可读性更强) set "target_var=%fruit%_colour" echo !%target_var%!
当用户输入banana时,!%fruit%_colour!会先解析为!banana_colour!,延迟扩展会将其展开为对应的yellow。
方案2:使用call命令二次解析
如果不想启用延迟扩展,可以借助call命令让批处理重新解析命令行:
- 先导入配置文件变量:
call fruit_config.bat
- 获取用户输入后,通过call实现间接变量展开:
set /p fruit="Please input a fruit: " :: 方式1:直接输出结果 call echo %%%fruit%_colour%% :: 方式2:存入临时变量后输出 set "target_var=%fruit%_colour" call set "result=%%target_var%%" echo %result%
这里的%%%fruit%_colour%%会在第一次解析时变为%banana_colour%,call执行时会再次解析该变量,最终输出yellow。
内容的提问来源于stack exchange,提问作者Chris Scarr
相关产品推荐
相关产品推荐

