2012-05-28 143 views
0

我在使用powershell編寫的登錄腳本中遇到問題。我想在用戶空間中設置environemtn路徑。我首先聲明一個新變量,然後將其添加到最後的路徑變量。新變量不會擴展到路徑中的值。以下是代碼使用powershell設置路徑變量

想法是每次登錄時更新gat_path,但僅在第一次更新路徑。只將GAT_PATH追加到路徑變量一次。在此之後,每當我更新GAT_PATH時,路徑應該自動具有新值。

$gat_path="S:\common\tools\sqlite;" 
[environment]::SetEnvironmentVariable("GAT_PATH",$gat_path,[system.environmentvariabletarget]::User) 
$res=$env:path.ToLower().Contains("s:\common") # if gat_path already added, then dont add again. 
IF($res -eq "True") 
{ 
echo "GAT Path is already set." 
} 
ELSE 
{ 
    [environment]::SetEnvironmentVariable("PATH",$env:path+";%GAT_PATH%",[system.environmentvariabletarget]::User) 
} 

在上面的代碼中,GAT_PATH變量在environemnt變量創建,但路徑的值是c:\python26\;%GAT_PATH%GAT_PATH不會擴展到其實際值。 我使用變量來設置路徑的原因是因爲每次登錄時都會運行此腳本。我不想在路徑末尾添加sqlite路徑,因爲每次登錄時它都會在最後添加sqlite。我希望能夠隨時在腳本中更新GAT_PATH,並且路徑應該自動具有GAT_PATH的新值。

請注意I cannot執行以下操作會產生與直接設置路徑而不使用變量相同的問題。每次我登錄時,它都會將gat_path保存到路徑變量中。

$gat_path="S:\common\tools\sqlite;" 
[environment]::SetEnvironmentVariable("PATH",$env:path+";"+$gat_path,[system.environmentvariabletarget]::User) 

使用powershell以編程方式使用變量定義路徑變量的正確方法是什麼?

問候, 阿洛克

回答

0

而不是使用%GAT_PATH%你應該使用$env:gat_path

+0

感謝您的答覆。以上解決方案與使用gat_path的絕對值有相同的問題。每次運行腳本時,它都會繼續追加'gat_path'的值。對於。例如。如果我運行腳本2次,路徑的值將是'c:\ python26 \; S:\ common \ tools \ sqlite; S:\ common \ tools \ sqlite'我不希望它每次都追加這個運行腳本。相反,如果我在路徑'c:\ python26 \;%GAT_PATH%'中有一個變量,現在無論有多少個tmes我更新'GAT_PATH'變量,我都會有'gat_path'的更新值。 – Alok

+0

我想我可能不得不把一條骯髒的解決方案從路徑中去掉'gat_path',然後使用原始路徑值並追加新的'gat_path'。我正在通過在路徑中使用一個變量尋找更優雅的解決方案。 – Alok