【问题标题】:Can a predefined environment variable reference dynamically created environment variables?预定义的环境变量可以引用动态创建的环境变量吗?
【发布时间】:2016-11-03 15:09:18
【问题描述】:

我想创建一个引用在命令提示符中创建的环境变量的持久环境变量。这显示了我正在尝试做的事情:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\testuser>echo %HTTP_PROXY%
http://%user%:test@%proxyip%:8080

C:\Users\testuser>set user=testuser

C:\Users\testuser>set password=testpass

C:\Users\testuser>set proxyip=10.20.10.100

C:\Users\testuser>echo %HTTP_PROXY%
http://%user%:test@%proxyip%:8080

我期待打印出最终的 echo 语句

http://testuser:testpass@10.20.10.100:8080

有没有办法让这成为可能?

【问题讨论】:

  • 这篇文章可能看起来很愚蠢。但这篇文章的原因是我不想通过 Windows 环境变量发布我的密码,我想在命令提示符中定义它,我将在其中使用长 url 变量并且不想记住长变量。 .
  • Windows 命令提示符不是 DOS。
  • 环境变量只是字符串。它们不是动态评估的。

标签: windows


【解决方案1】:

不,这是不可能的。环境变量不会递归展开。

您可以做的是创建一个批处理脚本来为您设置HTTP_PROXY。它甚至可以提示您输入用户名、密码和 IP 地址,以使用set 保存您。

(如果您出于某种原因需要批处理脚本从环境中获取模板字符串,而不是使用硬编码字符串,this answer 解释了如何执行此操作。)


脚注:

持久性环境变量可以引用其他持久性环境变量,但受到一些限制。请参阅 here 和 here。

但是,这只发生在为新进程构建环境块时,而不是在进程运行时。 (在新进程从其父进程继承其环境的情况下也不会发生这种情况,只有在构建全新的环境块时才会发生。)

【讨论】:

  • 感谢哈利的建议。我目前正在使用另一个批处理脚本来实现相同的目的。事实上,我已经在需要扩展的地方拆分了环境变量,并且在脚本中,我将环境变量与运行时传递给脚本的参数连接起来。
猜你喜欢
  • 2020-07-22
  • 2011-11-30
  • 2019-02-22
  • 2021-11-09
  • 1970-01-01
  • 2014-09-30
  • 2022-12-17
  • 2023-02-02
  • 1970-01-01
相关资源
最近更新 更多