2

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

Итак, есть ли способ сделать это в одной командной строке - и временно?

2 ответа2

1

Вы можете запустить командный файл с setlocal

или в строке cmd запустите еще один cmd.exe, который наследует текущую среду, но изменения изменчивы.

cmd /c "SET MYVAR=1&myprogram.exe" 
1

Попробуйте эту команду:

set Foo=bar & abc.exe & set Foo=

Эта команда делает:

  1. Установите переменную Foo с помощью значения bar .
  2. Запустите команду abc.exe .
  3. Сбросить переменную Foo , добавив пустое значение.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .