1

Можно ли "складывать" переменные среды Windows, такие как,

"RUBY_PATH" = "C\ruby\bin"
"PYTHON_PATH" = "C:\python332"
"PROGRAMMING_PATH" = "%RUBY_PATH%;%PYTHON_PATH%"
"Path" = ...;%PROGRAMMING_PATH%'"

Я могу сделать это на узлах Linux, но пока не повезло на узлах Windows. Что-то я не правильно делаю?

4 ответа4

2

Вы можете сделать это легко из командной строки:

SET RUBY_PATH=C:\Ruby\Bin
SET PYTHON_PATH=C:\Python332
SET PROGRAMMING_PATH=%RUBY_PATH%;%PYTHON_PATH%
SET PATH=%PATH%;%PROGRAMMING_PATH%

Если вы устанавливаете эти значения непосредственно в реестре, вам нужно будет использовать тип данных REG_EXPAND_SZ для тех, которые необходимо расширить. То есть для переменных, которые содержат другие переменные.

1

Я не понимаю, почему нет, Windows делает это из коробки:

Я не могу сказать, что лично использовал бы это очень часто, из-за риска дурачиться и не очень дружественного интерфейса для него. Но это выглядит возможным.

0

cmd или командный файл:

set

wmic:

wmic ENVIRONMENT get Name, VariableValue, UserName | more

или же

wmic ENVIRONMENT get * | more

powershell:

powershell gci env: | more

WSH:

ReadEnv2.vbs | more

ReadEnv2.vbs:

Set WshShell = CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment
WScript.Echo "WINDIR=" & WshEnv.Item("WINDIR")  & vbCrLf &_
                                                  vbCrLf

Set WshShell = CreateObject("WScript.Shell")
WScript.Echo "Environment System:"              & vbCrLf &_ 
"..............................................."
For Each IEnv In WshShell.Environment("System")
    WScript.Echo IEnv
Next

WScript.Echo vbCrLf & "Environment User:"       & vbCrLf &_ 
"..............................................."
For Each IEnv In WshShell.Environment("User")
    WScript.Echo IEnv
Next

WScript.Echo vbCrLf & "Environment Volatile:"   & vbCrLf &_ 
"..............................................."
For Each IEnv In WshShell.Environment("Volatile")
    WScript.Echo IEnv
Next
WScript.Echo vbCrLf & "Environment Process:"    & vbCrLf &_ 
"..............................................."
For Each IEnv In WshShell.Environment("Process")
    WScript.Echo IEnv
Next
0

Кажется, это зависит от того, как вы устанавливаете переменные среды. В командной строке вы можете сделать это:

set a=C:
set b=%a%\Users
set c=%b%\Thomas
cd %c%

потому что переменные среды раскрываются сразу.

Но вы не можете сделать это:

set c=%b%\Thomas
set b=%a%\Users
set a=C:
cd %c%

С другой стороны, это работает, если вы определяете переменные среды через диалог переменных среды, а затем запускаете командную строку. Он также работает в программе на C #, когда настраивается в этом диалоговом окне, а затем запрашивается

string c = Environment.GetEnvironmentVariable("c");

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