从cmd.exe设置持久环境变量

Art*_*hur 110 windows cmd batch-file environment-variables

我必须在不同的Windows机器上设置环境变量,但我不想通过访问"我的电脑"的属性屏幕来手动更改它们

我想从命令行使用批处理文件.据我所知,使用set只会更改我将在命令窗口中调用的进程的变量.

我想明确地设置它,所以稍后,当运行一个新进程时,它将使用我设置的那些新设置.有没有办法从命令行执行此操作?

Vik*_*vid 171

使用SETX命令(注意'x'后缀)来设置cmd窗口关闭后持久存在的变量.

虽然值得阅读如果打印用法(setx /?)时显示的"注释",特别是:

2)在本地系统上,此工具创建或修改的变量将在以后的命令窗口中可用,但在当前的CMD.exe命令窗口中不可用.

3)在远程系统上,此工具创建或修改的变量将在下次登录会话中可用.

在PowerShell中,[Environment] :: SetEnvironmentVariable命令.

  • 小心使用SETX,它会将你的变量长度截断为1024 char ...操作%path%时非常危险. (41认同)
  • 它适用于我的Windows 7.您使用的是哪个版本的Windows? (2认同)
  • 使用Power Shell,您可以执行[[Environment] :: SetEnvironmentVariable('PATH',“无论您需要什么,”,“机器”)`,请参见https://msdn.microsoft.com/zh-cn/library/ 96xafkes(v = vs.110).aspx (2认同)

Dav*_*nan 18

环境变量MSDN文档告诉您该怎么做:

若要以编程方式添加或修改系统环境变量,将它们添加到HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment注册表项,然后广播WM_SETTINGCHANGE消息,并将lParam设置为字符串"Environment".这允许应用程序(如shell)获取更新.

您当然需要管理员权限才能执行此操作.我知道无法从Windows批处理广播Windows消息,因此您需要编写一个小程序来执行此操作.


gse*_*tle 6

:: Sets environment variables for both the current `cmd` window 
::   and/or other applications going forward.
:: I call this file keyz.cmd to be able to just type `keyz` at the prompt 
::   after changes because the word `keys` is already taken in Windows.

@echo off

:: set for the current window
set APCA_API_KEY_ID=key_id
set APCA_API_SECRET_KEY=secret_key
set APCA_API_BASE_URL=https://paper-api.alpaca.markets

:: setx also for other windows and processes going forward
setx APCA_API_KEY_ID     %APCA_API_KEY_ID%
setx APCA_API_SECRET_KEY %APCA_API_SECRET_KEY%
setx APCA_API_BASE_URL   %APCA_API_BASE_URL%

:: Displaying what was just set.
set apca

:: Or for copy/paste manually ...
:: setx APCA_API_KEY_ID     'key_id'
:: setx APCA_API_SECRET_KEY 'secret_key'
:: setx APCA_API_BASE_URL   'https://paper-api.alpaca.markets'
Run Code Online (Sandbox Code Playgroud)