在我寻求解决另一个与环境变量/批处理文件相关的问题的过程中,我再次遇到了我之前访问过的问题(但我终生无法记住是如何解决的,即使我解决了它)。
假设您有两个 BAT 文件(或一个批处理文件和命令行)。如何将环境变量名称传递给另一个,以便它可以读取该变量?以下示例不起作用:
A.BAT:
@call b.bat path
B.BAT:
@echo %%1%
> A.BAT
> %1
> B.BAT path
> %1
传递环境变量名称很容易,但被调用者似乎无法使用它。 (我不记得上次它出现时我是否或如何处理这个问题,但我怀疑它需要重定向临时 BAT 文件并调用它们等不太理想的使用。)
有任何想法吗?谢谢。
最佳答案
您可以使用一个小技巧,不幸的是没有记录在案:
call echo %%%1%%
然后你可以使用延迟扩展:
setlocal enabledelayedexpansion
echo !%1!
延迟扩展在这里很有帮助,主要是因为它使用其他分隔符作为变量并在运行命令之前直接评估它们,而通常评估可能与正常参数扩展冲突。
另一种过度使用的方法是子程序:
call :meh "echo %%%1%%"
...
:meh
%~1
goto :eof
所有的例子,包括另一个答案,在这里都有一个共同点:它们都强制
cmd
评估变量/参数两次。否则它不会工作,因为第一次评估必须产生 %VariableName%
,而第二个会将其扩展到变量的内容。您也可以在 my SVN 上找到代码.
关于batch-file - 如何使用环境变量作为环境变量名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2623704/