2012-05-28 142 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