在一行中临时设置 Windows cmd 的环境变量以运行程序?

sdb*_*bbs 7 windows command-line environment-variables

我见过从命令提示符设置和获取 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 CLI 中是否有类似命令替换的东西?

在 Windows 中,'( )' 运算符的行为与 Bash 命令替换类似。

/sf/ask/563876001/

自 2000 年以来在所有 Microsoft 操作系统上都是这样,今天仍然很好:
dir & echo foo

所以,我试过:

> (SET MYVAR=1 && myprogram.exe)
Run Code Online (Sandbox Code Playgroud)

...这实际上有效 - 除了,似乎 Windows 中的括号不是“子外壳”(或“子进程”),因此将值“泄漏”设置到当前外壳上,这是我不想要的(在换句话说,如果我只是myprogram.exe在上面的命令之后运行,它仍然会选择MYVAR=1,而在 Linux 上,MYVAR在这种情况下将保持未设置)。

那么,有没有办法在单个命令行上执行此操作 -并且是暂时的?

Lot*_*ngs 8

你可以运行一个批处理文件 setlocal

或在 cmd 行启动另一个 cmd.exe,它继承当前环境但更改是不稳定的。

cmd /c "SET MYVAR=1&myprogram.exe" 
Run Code Online (Sandbox Code Playgroud)