Я видел Установка и получение переменных среды 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 в этом случае останется неустановленным).
Итак, есть ли способ сделать это в одной командной строке - и временно?
