在Windows中永久更改环境变量

在Windows中永久更改环境变量,windows,cmd,environment-variables,Windows,Cmd,Environment Variables,我找到了一种方法来更改用户的默认主目录,但我遇到了问题 执行此操作将主驱动器更改为C: 但当我检查环境变量时: 仍然是H:,系统重新启动后,windows设置中的环境变量也将返回到H:/ 我也尝试过这样改变它: 这似乎有效,但如果我打开一个新的cmd,它将恢复为H:/ 现在我正在尝试这样做,以便OpenSSH将C识别为我的主目录,而不是H:这是一个网络驱动器,迫使OpenSSH无法工作,除非我通过VPN连接到我的大学网络 在OpenSSH看来,如何永久地设置这些值?不“支持”更改这些环

我找到了一种方法来更改用户的默认主目录,但我遇到了问题

执行此操作将主驱动器更改为C:

但当我检查环境变量时:

仍然是H:,系统重新启动后,windows设置中的环境变量也将返回到H:/

我也尝试过这样改变它:

这似乎有效,但如果我打开一个新的cmd,它将恢复为H:/

现在我正在尝试这样做,以便OpenSSH将C识别为我的主目录,而不是H:这是一个网络驱动器,迫使OpenSSH无法工作,除非我通过VPN连接到我的大学网络


在OpenSSH看来,如何永久地设置这些值?

不“支持”更改这些环境变量的值,至少它不会像您预期的那样工作,因为Windows会将它们更改回来


根据这一点,如果需要更改这些设置,您应该使用策略。这篇文章还包含了如何做到这一点的链接(但就我个人而言,我从未尝试过)。请注意,这篇文章最初是为Windows 2000编写的,但我强烈怀疑,它仍然适用于当前的Windows版本。

早在DOS时代,环境变量是程序段的一部分,这意味着您基本上获得了限制在该程序范围内的变量的本地快照

我猜Windows并没有改变这一点,CMD窗口可用的环境变量只包含该窗口及其派生的任何其他窗口的范围。这个小实验支持了这一点:

在CMD窗口中键入

set homedrive=h:\
start cmd
set h
然后通过键入来测试它的更新

set h
从同一窗口类型

set homedrive=h:\
start cmd
set h
在这种新型的窗户里

set homedrive=h:\
start cmd
set h
完成此操作后,我得到HOMEDRIVE=H:\

如果我从“开始”菜单中打开一个新的CMD窗口,并执行相同的设置H,则我将获得HOMEDRIVE=C:\


我对OpenSSH一无所知,但我怀疑,就像START CMD一样,如果您编写一个批处理来更新环境变量,然后执行OpenSSH,那么OpenSSH就会工作。

它没有提到HOMEDRIVE值和HOMEDIRECTORY值之间的依赖关系,发生了什么(我想)它未能将主目录映射到HOMEDRIVE,因此默认返回到安全值(C:)

我写了一个脚本来更新本地广告,用你的值替换[]中的值。复制并粘贴到.vbs文件中,然后双击该文件以运行该文件

Set objUser = GetObject("WinNT://[COMPUTERNAME]/[USERNAME],user")
objUser.homeDirDrive = "H:"
objUser.HomeDirectory = "[URNPATH]"
objUser.SetInfo
e、 g


运行此命令,重新启动并测试。这对我很有效。

听起来域上的广告配置文件正在覆盖用户定义的变量。我看到您的屏幕截图显示您已连接到eait.org.edu.au域。这将是你问题的根源。我在这里列出了我在其他地方发现的一些细节,这可能会对您有所帮助:

HOMEDRIVE、HOMEPATH和HOMESHARE通过Active Directory进行设置和更新。即使在帐户上未设置主驱动器,也会设置HOMEDRIVE和HOMEPATH;但是,它们将被AD中设置的任何用户帐户属性覆盖

另请参见以下知识库文章:

http://support.microsoft.com/kb/841343
http://support.microsoft.com/kb/237566
http://support.microsoft.com/kb/101507 

关于这个问题的另一种解决方法,请注意:

-我以前创建了一个windows命令行shell可执行文件的新实例,该实例自动运行一个自定义脚本,因此每次启动shell时,环境变量都可能被覆盖

-要做到这一点,您只需将为更改环境变量而发布的代码放入一个批处理脚本中,存储在您喜欢的任何位置,然后通过转到属性>编辑用于启动shell的快捷方式,然后更改目标框:%SystemRoot%\system32\cmd.exe/K“C:\Documents and Settings\Administrator\My Documents\customshellscript.cmd”(显然/K之后的路径部分是自定义脚本的位置)

这样,如果您仍然在控制台上使用openSSH,它将始终正确设置homedrive。

在windows 8上:

  • 点击“windows键”
  • 键入“系统环境变量”
  • 允许“高级系统设置”进行更改
  • 选择“高级”选项卡
  • 点击“环境变量…”
  • 双击“XXXXXXXX用户变量”中的“路径”
  • 在变量末尾添加要用分号分隔的新路径

    e、 g.C:\程序文件\;C:\ Python 27\ shareeditdelete(1)标志


  • 这个问题一直困扰着我,我试图找到一个解决方案,但我已经找到了我认为是最终答案,并将其发布在:


    您需要运行“net user USERNAME/homedir:PATH”,其中USERNAME是您试图更改的用户的名称,PATH是驱动器号和所需主文件夹的完整路径,该主文件夹必须已经存在。

    如果环境变量正在还原,则可能涉及组策略。您是计算机的管理员吗机器加入域?一个选项是编写一个批处理文件来更改环境变量,然后启动OpenSSH。OpenSSH的确切版本是什么?我的意思是,如果您是从cygwin运行它,您可以在@azhrei中尝试
    /etc/passwd
    修复。如果我可以永久更改nEnvironment变量。它没有真正解释如何永久更改变量,它说的是关于组权限的内容,但没有实际的说明,有机会进一步解释吗?对不起,没有,没有-正如我说的,我从未尝试过。可能有帮助,也可能没有帮助。这是一个很好的答案,但这并不是我真正希望的,编写批处理文件是行不通的解决永久更改变量的问题。如何进行更改以使windows不将其更改回来?一定有错误。我已使用SETX和ADSI编辑HOMEDRIVE并重新启动我的电脑。我得到以下信息:ADSI r