在Windows PowerShell中设置环境变量

时间:2016-01-01 19:06:56

标签: powershell cmd

我无法从CMD set APPDATA=D:\复制此命令。

我最好的等价物是Set-Variable -Name $env:APPDATA -Value D:\。这不起作用!

完整的脚本是:

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的只读版本。我不明白为什么它不能在shell的会话的运行环境中更改,比如cmd和大多数* nix shell!

我确信除了只是运行Minecraft之外,还有更多用途。 :P

1 个答案:

答案 0 :(得分:6)

当您使用Set-Variable时, NOT -Name参数应为美元符号($)。

# 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"Variable:提供程序中创建了一个名为'ENV:AppData'的变量。)

备选方案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:\")