Я видел Установка и получение переменных среды 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
Вот так на всех ОС Microsoft с 2000 года и до сих пор хорош:
dir & echo foo
Итак, я попробовал:
> (SET MYVAR=1 && myprogram.exe)
... и это на самом деле работает - за исключением того, что в Windows круглые скобки, по-видимому, не являются "подоболочкой" (или "подпроцессом"), и поэтому установка значения "просачивается" в текущую оболочку, что мне не нужно ( Другими словами, если я просто запустите myprogram.exe
после вышеуказанной команды, он все равно MYVAR=1
, тогда как в Linux MYVAR
в этом случае останется неустановленным).
Итак, есть ли способ сделать это в одной командной строке - и временно?