I have seen Setting and getting Windows environment variables from the command prompt?, but my question is slightly different.
Say I have a terminal program, myprogram.c
-> myprogram.exe
, which reads environment variables; say:
...
char *valueMYVAR = getenv("MYVAR");
printf("MYVAR is %s\r\n", (valueMYVAR==NULL)?"":valueMYVAR );
...
Now, if I'm in Linux bash
, I can set the environment variable temporarily, just for that execution of the program, by simply writing it out on the command line, as in:
$ MYVAR=1 ./myprogram.exe
How could I do the same, if I am using the Windows Command Prompt (cmd.exe
)? I have tried:
> SET MYVAR=1 myprogram.exe
... but it doesn't work - in the sense that myprogram.exe
is not run at all, probably being interpreted as being part of the command line for the SET
command.
Is this kind of a thing doable in Windows Command Prompt? If relevant, I use Windows 10.
EDIT: Found these:
Is there something like Command Substitution in WIndows CLI?
In Windows the '( )' operator has a similar behavior as the Bash command substitution.
https://stackoverflow.com/questions/8055371/how-do-i-run-two-commands-in-one-line-in-windows-cmd
Like this on all Microsoft OSes since 2000, and still good today:
dir & echo foo
So, I've tried:
> (SET MYVAR=1 && myprogram.exe)
... and this actually works - except, it seems the parentheses in Windows are not a "subshell" (or "subprocess"), and therefore setting the value "leaks" onto the current shell, which I don't want (in other words, if I just run myprogram.exe
after the above command, it will still pick up MYVAR=1
, whereas on Linux, MYVAR
in that case would remain unset).
So, is there a way to do this on a single command line - and temporarily?