用百分號包裹的變數不能用作環境變數

用百分號包裹的變數不能用作環境變數

正如你所看到的,我為java和maven定義了JAVA_HOME和M2_HOME並加入路徑環境變數: 在此輸入影像描述

當我嘗試執行 java 或 mvn 命令時,它們在 Windows 終端機的 powershell 中運作正常。

Windows 終端機和 powershell 中的 mvn: 在此輸入影像描述

但如果我開啟新的 powershell 或 cmd 則不起作用 在此輸入影像描述

知道為什麼它們在 Windows 終端機而不是獨立的 powershell 中運作嗎?如果變數沒有被 % % 包裹,那麼就沒有問題,工作正常。例如,在第一個螢幕截圖中,nvm 在 Windows 終端機和 powershell 上都運作正常。

答案1

看起來您找到了解決方案,但這是發生這種情況的原因:

您在中設定JAVA_HOMEM2_HOME變數使用者環境,但將它們添加到您的系統環境路徑。在這種情況下,您在設定環境變數時會遇到競爭條件問題。在 Windows 中,根據SS64:

當一個新進程啟動時,變數將按以下順序載入:

  • 系統環境變數
  • Shell 變數(每個使用者)
  • 使用者環境變數
  • Shell 變數(其他)

所以你通常不能設定使用者裡面的環境變數系統並讓它們正確擴展。看起來新的 Windows 終端可能會以相反的順序運作或以不同的方式處理 PATH 擴展,但這並不能保證其他進程也會運作。

以下是要尋找的內容:

# Powershell (core 7.2) terminal:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;%JAVA_HOME%;
                            # ^Bad, not expanded

# Windows Terminal, running Powershell 7.2:
PS C:\Users\username> $env:path
C:\Program Files\PowerShell\7;C:\Program Files\JavaFolder\jre\bin;
                            # ^Good

VS Code 會以任何一種方式運行,具體取決於您使用的終端類型。


如果將它們全部設置在同一環境中,則效果很好,因此:

  1. 添加JAVA_HOME/M2_HOME到您的使用者PATH 並從中刪除系統路徑,或
  2. 設定JAVA_HOMEM2_HOME系統而是變數。 (看起來這對你有用)

相關內容