2016-01-01 3 views
2

У меня возникла проблема с копированием этой команды из CMD set APPDATA=D:\. Лучший эквивалент у меня есть Set-Variable -Name $env:APPDATA -Value D:\ Это не работает!Настройка переменной окружения в окнах powershell

Полный сценарий:

set APPDATA=D:\ 
start java -jar D:\.minecraft\minecraft.jar 

Это устанавливает так Java выглядит D:\ для .minecraft вместо APPDATA.

Полная версия PowerShell (который не работает справа):

& Set-Variable -Name $env:APPDATA -Value D:\ 
& 'C:\Program Files\Java\jre1.8.0_66\bin\java.exe' -jar D:\.minecraft\Minecraft.jar 

Он по-прежнему смотрит на только для чтения версии $env:APPDATA. Я не понимаю, почему он не может быть изменен в рабочей среде для сеанса оболочки, например, cmd и большинство * NIX-оболочек!

Я уверен, что для этого больше применений, чем только работает Minecraft. : P

+0

Я не думаю, что это дубликат, так как другой вопрос никогда не упоминает 'Set-Variable' на всех. – Eris

+0

Это, вероятно, потому, что 'Set-Variable' предназначен для установки переменных PowerShell, * not * для установки переменных среды. –

+0

Другой вопрос на самом деле не говорит о том, что 'Set-Variable' не относится к переменным среды в любом из ответов и не упоминается в вопросе. Хотя решение аналогично, это не дублирующий вопрос. – Eris

ответ

5

При использовании Set-Variable аргумент -Name должен содержать NOT есть знак доллара ($).

# WRONG: Set's the variable using the name stored in ENV:APPDATA 
Set-Variable -Name $env:APPDATA -Value D:\ 

Кроме того, Set-Variable не появляется на работе, как ожидается, с переменными окружения. Я предполагаю, что это связано с тем, что Set-Variable специально разработан для работы с поставщиком переменных Variable:, а не с провайдером среды env:. (Я проверил это локально, используя Set-Variable -Name ENV:AppData -Value "foo" создал переменную. ENV: AppData 'в Variable: провайдера)

Альтернатива 1 (простой формат):

$ENV:AppData="D:\" 
& 'C:\Program Files\Java\jre1.8.0_66\bin\java.exe' -jar D:\.minecraft\Minecraft.jar 

Альтернатива 2 (с использованием C# API):

[Environment]::SetEnvironmentVariable("APPDATA", "D:\") 
+0

. Спасибо. очень! Я осмотрел некоторых, но ничего не нашел. Я довольно новичок в Powershell и не знал о поставщике «Variable:» и «Environment». Я начинал догадываться, что существует переменная _local variable_ vs aglobal environment_, но я не мог найти ничего, что говорило об официальной документации Microsoft, или я не искал нужного места. –

Смежные вопросы