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

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

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

在 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=

此命令的作用是:

  1. 设置Foo变量的bar值。
  2. 运行abc.exe命令。
  3. Foo通过添加空值来取消设置变量。

相关内容