我无法从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
答案 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:\")