我见过从命令提示符设置和获取 Windows 环境变量?,但我的问题略有不同。
假设我有一个终端程序myprogram.c
-> myprogram.exe
,它读取环境变量;说:
...
char *valueMYVAR = getenv("MYVAR");
printf("MYVAR is %s\r\n", (valueMYVAR==NULL)?"":valueMYVAR );
...
现在,如果我在 Linux 中bash
,我可以临时设置环境变量,只是为了执行该程序,只需在命令行上写出来,如下所示:
$ MYVAR=1 ./myprogram.exe
如果我使用 Windows 命令提示符 ( ),我该如何做同样的事情cmd.exe
?我尝试过:
> SET MYVAR=1 myprogram.exe
...但是它不起作用 - 从根本上说它myprogram.exe
没有运行,可能被解释为命令的命令行的一部分SET
。
这种事情可以在 Windows 命令提示符中完成吗?如果相关的话,我使用 Windows 10。
编辑:发现这些:
在 Windows 中,'( )' 运算符具有与 Bash 命令替换类似的行为。
https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd
自 2000 年以来,所有 Microsoft 操作系统均如此,并且至今仍然有效:
dir & echo foo
因此,我尝试过:
> (SET MYVAR=1 && myprogram.exe)
...这确实有效 - 除了,Windows 中的括号似乎不是“子 shell”(或“子进程”),因此将值“泄漏”到当前 shell 上,这是我不想要的(换句话说,如果我只是在myprogram.exe
上述命令之后运行,它仍然会选择MYVAR=1
,而在 Linux 上,MYVAR
在这种情况下将保持未设置状态)。
那么,有没有办法在单个命令行上做到这一点 -和暂时地?
答案1
你可以使用setlocal
或者在 cmd 行上启动另一个 cmd.exe,它继承当前环境但变化是可变的。
cmd /c "SET MYVAR=1&myprogram.exe"
答案2
尝试这个命令:
set Foo=bar & abc.exe & set Foo=
此命令的作用是:
- 设置
Foo
变量的bar
值。 - 运行
abc.exe
命令。 Foo
通过添加空值来取消设置变量。