【发布时间】:2015-05-06 20:00:05
【问题描述】:
我想设置一个环境变量,然后生成一个 Windows 资源管理器窗口,让从这个新资源管理器窗口启动的进程继承该环境变量。我想这样做,以便我与 TortoiseSVN shell 扩展集成的差异工具可以访问项目启动脚本中设置的项目特定环境变量。但是这样做的明显方法似乎在某处丢失了环境变量:
- 启动 cmd.exe
set MYVAR="foo"set | findstr MYVAR- 结果包含 MYVAR="foo"
explorer .- 在出现的资源管理器窗口中,Shift+右键单击文件夹并选择“在此处打开命令窗口”
set | findstr MYVAR- 结果不包含 MYVAR
我已将 Windows 资源管理器设置为 spawn a new process for each Explorer window,希望这会有所帮助,但似乎没有任何效果。
我可以使用setx 而不是set 来全局存储变量,但是如果我希望多个窗口具有不同版本的 MYVAR(例如,如果我同时处理多个项目),这将不起作用.
有没有办法设置一个特定于 Windows 资源管理器窗口的环境变量,它会被它的所有子进程继承?
【问题讨论】:
-
据我所知,Explorer 进程从运行开始菜单的进程继承其环境。您可以通过注销并重新打开或关闭进程并使用任务管理器重新启动它来重置该环境,但我不知道有什么方法可以在保持不同环境的同时用不同的环境实例化一个新的
explorer.exe进程变量集(除了使用不同的用户)。如果 Microsoft 专门检查以确保这不会发生,我不会感到惊讶。 -
老实说,这听起来像是一个 XY 问题。您实际上想要完成什么?为什么不使用批处理脚本或带有命令行 svn 客户端的命令行,它通常与 TortoiseSVN 一起安装到
C:\Program Files\TortoiseSVN\bin? -
TortoiseSVN 被配置为为某些二进制文件启动一个特殊的 diff 工具,并且这个 diff 工具需要知道在哪里可以找到一个项目特定的目录,以便在处理 diff 之前进行一些额外的配置。我环境中的其他工具已经使用项目启动脚本设置的环境变量来查找此目录。所以我的目标是在 diff 工具中使用该环境变量(每个项目都会更改)。由于 TortoiseSVN 通过 Windows 资源管理器启动,我想让 Windows 资源管理器将该环境变量传递给 TortoiseSVN(然后传递给 diff 工具)。
-
你可能是对的,因为如果解决方案涉及大量脚本和调用特殊命令来启动资源管理器窗口......它可能更容易编写工具来直接调用 TortoiseSVN 对话框,具有适当的环境变量。
标签: windows batch-file windows-explorer