如何将环境变量用作环境变量名称

时间:2010-04-12 16:41:40

标签: batch-file environment-variables argument-passing

在我寻求另一个环境变量/批处理文件相关问题的解决方案时,我再一次遇到过我之前访问过的一个问题(但不能为我的生活记住如何,甚至 if 我解决了它。)

假设您有两个BAT文件(或一个批处理文件和命令行)。如何将环境变量名称传递给另一个,以便它可以读取变量?以下示例不起作用:

A.BAT:
  @call b.bat path

B.BAT:
  @echo %%1%

> A.BAT
> %1
> B.BAT path
> %1

传递环境变量名很容易,但被调用者似乎无法使用它。 (我不记得上次它出现时是否或如何处理它,但我怀疑它需要使用重定向临时BAT文件并调用它们等不太理想。)

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:4)

你可以使用一个小技巧,遗憾的是没有记录:

call echo %%%1%%

然后你可以使用延迟扩展:

setlocal enabledelayedexpansion
echo !%1!

延迟扩展在这里有帮助,主要是因为它使用其他分隔符作为变量并在运行命令之前直接评估它们,而通常评估可能会与正常的参数扩展冲突。

过度使用这种方法的另一种方法是子程序:

call :meh "echo %%%1%%"

...

:meh
%~1
goto :eof

所有示例,包括其他答案,都有一个共同点:它们都强制cmd来评估变量/参数两次。它不会起作用,因为第一个评估必须产生%VariableName%,而第二个将扩展到变量的内容。

您也可以在my SVN上找到该代码。

答案 1 :(得分:2)

B.BAT:

FOR /F "delims=" %%a IN ('echo.%%%1%%') DO set inputvar=%%a
echo %inputvar%

这是一种做法。

如果你想做的只是回应它,你可以这样做:echo.%%%1%%|moreecho %%%1%%|find /v ""