通过Windows资源管理器传递环境变量

时间:2015-05-06 20:00:06

标签: windows batch-file windows-explorer

我想设置一个环境变量,然后生成一个Windows资源管理器窗口,使得从这个新的Explorer窗口启动的进程继承该环境变量。我想这样做,因此我与TortoiseSVN shell扩展集成的diff工具可以访问项目启动脚本中设置的项目特定的环境变量。但是这样做的明显方法似乎在某处失去了环境变量:

  1. 启动cmd.exe
  2. set MYVAR="foo"
  3. set | findstr MYVAR
  4. 结果包含MYVAR =“foo”
  5. explorer .
  6. 在生成的资源管理器窗口中,按Shift键并右键单击文件夹,然后选择“在此处打开命令窗口”
  7. set | findstr MYVAR
  8. 结果不包含MYVAR
  9. 我已将Windows资源管理器设置设置为spawn a new process for each Explorer window,希望这会有所帮助,但似乎没有效果。

    我可以使用setx而不是set来全局存储变量,但是如果我想让多个窗口拥有不同版本的MYVAR(例如,如果我一次处理多个项目),这不起作用。

    有没有办法设置特定于Windows资源管理器窗口的环境变量,它将由其所有子进程继承?

2 个答案:

答案 0 :(得分:2)

  1. 打开CMD

    setx foo bar

  2. 启动资源管理器

    开始。

  3. 打开一个新的命令窗口(Shift +右键单击一个文件夹)

  4. 设置foo

  5. 输出

    富=栏

  6. 现在,如果你回到2中打开的cmd并输入

    setx foo bar2

  7. 在3开放的CMD仍会显示

    >set foo
    foo=bar
    

    但是,如果您从6开放的CMD中的资源管理器中打开一个新的CMD.EXE,您将获得

    >set foo
    foo=bar2
    

    这是有效的,因为SETX将创建或修改的变量传递给 future 命令窗口,但不会传递给当前或已创建的CMD.exe。

答案 1 :(得分:0)

程序获取它的启动过程环境变量的副本。因此,如果您生成一个新进程(文件夹选项 - 视图中的设置),这将起作用。

Set a=fred
explorer.exe

set a=cat
explorer.exe

并且记住你必须指定/n命令行参数来强制在一个文件夹中放置两个窗口。