我正在尝试使用setx命令设置环境变量,如下所示
setx PATH "f:\common tools\git\bin;f:\common tools\python\app;f:\common tools\python\app\scripts;f:\common tools\ruby\bin;f:\masm32\ bin;F:\Borland\BCC55\Bin;%PATH%"
但是,如果值超过 1024 个字符,我会收到以下错误:
警告:正在保存的数据被截断为 1024 个字符。
成功:指定的值已保存。
但是最后的一些路径没有保存在变量中,我猜是由于错误提示的字符限制。
我想将提示更改为$p$g$_$f永久,但每次重新打开命令窗口时它都会自行重置。
我怎样才能让它永远保持不变?
是否有任何命令行工具可用于在 Windows 中编辑环境变量?
如果这是智能工具就好了,例如:
最后但并非最不重要的 -我希望我的更改在会话之间保持不变,所以简单的 SET 是不可能的......
有一个非常好的 GUI 工具,叫做路径编辑器,我需要这样的东西,但对于命令行。
我开始在我酒店的网络中使用 Chocolatey 来安装软件。我在 Win 2008 上设置了一个域,但我的所有用户都不是管理员。
所以,假设我有一个用户 JOE,它不是域的管理员(也不是在机器上)和一个用户 PETER,它是两者的管理员,并且我以 JOE 身份登录。当我以管理员身份打开提示(或 powershell)时,Windows UAC 要求输入管理员用户名/密码。所以我用 PETER 的凭据填充它。然后我可以安装 Chocolatey (in C:\ProgramData\Chocolatey) 并在C:\ProgramData\Chocolatey\libs. 这很好。
如果该应用程序是为所有用户安装的(例如 Sublime Text 3,安装在C:\Program Users文件夹中),则一切正常。但是,当我运行“单用户”安装(例如 Wunderlist,安装在C:\Users\USERNAME\AppData\...)时,它会安装在 PETERAppData而不是 JOE 上AppData。
如果我手动运行安装程序,它会要求我提供 PETER 的凭据,但该应用程序安装在 JOE 的用户路径中。
我可以用 Chocolatey 得到同样的行为吗?我做错了什么还是可以以某种方式解决这个问题?
我有一个批处理文件,它使用以下命令生成一个带有修改路径的 shell:
cmd /K set PATH=%PATH%;<additional path locations>
Run Code Online (Sandbox Code Playgroud)
我还想为生成的 shell 设置额外的环境变量。有没有办法做到这一点?
可能的重复:
从命令提示符设置和获取 Windows 环境变量?
有什么方法可以从 Windows 的命令行永久设置系统范围内的环境变量?
就像是
>systemset newVar=foo
Run Code Online (Sandbox Code Playgroud)
或者要编辑的文件也可以很好地工作。
我见过从命令提示符设置和获取 Windows 环境变量吗?,但我的问题略有不同。
假设我有一个终端程序myprogram.c-> myprogram.exe,它读取环境变量;说:
...
char *valueMYVAR = getenv("MYVAR");
printf("MYVAR is %s\r\n", (valueMYVAR==NULL)?"":valueMYVAR );
...
Run Code Online (Sandbox Code Playgroud)
现在,如果我在 Linux 中bash,我可以临时设置环境变量,只是为了程序的执行,只需在命令行上写出来,如下所示:
$ MYVAR=1 ./myprogram.exe
Run Code Online (Sandbox Code Playgroud)
如果我使用的是 Windows 命令提示符 ( cmd.exe) ,我怎么能做同样的事情?我试过了:
> SET MYVAR=1 myprogram.exe
Run Code Online (Sandbox Code Playgroud)
...但它不起作用 - 从myprogram.exe根本不运行的意义上说,可能被解释为命令的命令行的一部分SET。
这种事情在 Windows 命令提示符中可行吗?如果相关,我使用 Windows 10。
编辑:发现这些:
在 Windows 中,'( )' 运算符的行为与 Bash 命令替换类似。
自 2000 年以来在所有 Microsoft 操作系统上都是这样,今天仍然很好:
dir & echo foo
所以,我试过:
> (SET MYVAR=1 && myprogram.exe) …Run Code Online (Sandbox Code Playgroud)