【问题标题】:How to set an environment variable dependent on another one? (Windows)如何设置依赖于另一个环境变量? (视窗)
【发布时间】:2019-10-27 17:55:33
【问题描述】:

我正在寻找一种在 Windows 上如何设置依赖于另一个环境变量的方法。就我而言,我想将新路径添加到PYTHONPATH。假设有一个现有的环境变量

%INSTALLATION_DIR% = D:\Programs\MyProject

最简单的方法是:

SETX PYTHONPATH "%PYTHONPATH%;%INSTALLATION_DIR%\Utility\Scripts"

但是,%INSTALLATION_DIR% 直接被D:\Programs\MyProject 替换,所以如果%INSTALLATION_DIR% 发生变化,PYTHONPATH 不会更新。

有没有办法将文本 %INSTALLATION_DIR% 写入环境变量,而不直接评估变量?

如果可能的话,我想以自动化的方式(因此使用控制台、powershell 或 python)来执行此操作,因为我想编写一个脚本,将路径列表添加到PYTHONPATH

【问题讨论】:

  • 猜你正在寻找延迟扩展。请参考stackoverflow.com/questions/10558316/…
  • 谢谢你的链接,但这不是我要找的。问题不在于变量可以在脚本期间更改,而是我想使用文本“%INSTALLATION_DIR%”而不是这个环境变量的值。

标签: windows environment-variables windows-console


【解决方案1】:

像对待特殊字符一样对待 %。加倍% 所以

SETX PYTHONPATH "%PYTHONPATH%;%%INSTALLATION_DIR%%\Utility\Scripts"

【讨论】:

  • 这会导致 %D:\Programs\MyProject%\Utility\Scripts
  • 这个答案应该进入一个bat文件,然后运行。您将它直接粘贴到 CMD 窗口中,在这种情况下,您需要使用 ^ 转义 %。 CMD 不是一门很棒的编程语言吗?
【解决方案2】:

我刚刚找到了解决方案。如果环境变量的名称写在引号中,则不会对其进行评估。

SETX PYTHONPATH "%PYTHONPATH%;%"INSTALLATION_DIR"%\Utility\Scripts"

【讨论】:

  • 请注意,INSTALLATION_DIR 应该是一个不依赖于其他环境变量的简单值。在注册表中它应该是REG_SZ,而PYTHONPATH 将是REG_EXPAND_SZ。 Windows 会注意在 REG_EXPAND_SZ 值之前加载所有 REG_SZ 值,因此后者依赖于前者总是可以的。
  • 另请注意,单独使用 setx.exe 会扩展当前的 PYTHONPATH 值,这可能取决于其他变量。为了防止这种情况,您需要通过 reg.exe 获取未扩展的值。
  • 此外,帮助中的示例记录了 setx.exe 将用“%”替换“~”以绕过 shell 扩展。
  • 感谢您的提示。仅当新环境变量仅包含单个路径时,使用“~”或“^%”而不是“%”的变体才有效。由于 PYTHONPATH 包含多个,我通过使用 os.environ[PYTHONPATH] (在 python 中)读取 PYTHONPATH 并将所有 % 字符替换为 %" 或 "%. 来解决它
  • 如果你使用 Python,你应该使用 winreg 模块来读取和修改未扩展的值。例如:k = winreg.OpenKey(winreg.HKEY_CURRENT_USER, 'Environment');new_value = winreg.QueryValueEx(k, 'PYTHONPATH')[0] + r';%INSTALLATION_DIR%\Utility\Scripts'。 setx.exe 通知资源管理器更新其环境,因此您可能希望使用它来设置值而不是 winreg。例如:subprocess.call('setx.exe PYTHONPATH "{}"'.format(new_value))。请注意,这种情况下不涉及 CMD shell,因此您不必担心在命令行中转义百分比。
猜你喜欢
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 2023-03-24
  • 1970-01-01
  • 2022-12-20
相关资源
最近更新 更多