batch-file - 如何使用环境变量作为环境变量名称

标签 batch-file environment-variables argument-passing

在我寻求解决另一个与环境变量/批处理文件相关的问题的过程中,我再次遇到了我之前访问过的问题(但我终生无法记住是如何解决的,即使我解决了它)。

假设您有两个 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/

相关文章:

ssl - Docker HTTPS 访问 - ONLYOFFICE3

参数太少的 C 函数调用

python - Python中的高效内存

javascript - 如何将环境变量转换为JSON对象?

maven - 使用 Maven AntRun 插件检查环境变量

c - 在可变参数宏中引用特定参数

batch-file - 如何修复带有希伯来字体的批处理文件?

windows - 在批处理文件的参数中转义“、<、>、>> 或 | 等字符

windows - 批处理文件如何并行读取两个文本文件?

batch-file - 仅从 dll 文件中获取版本中的数字