从Windows路径变量中删除行

时间:2017-05-28 01:26:50

标签: windows powershell environment-variables

让我们说这是我的Windows系统PATH的样子:

  

C:\ ORACLE \产品\ 11.2.0 \ 32位\的Client_1 \ BIN; C:\ ORACLE \产品\ 11.2.0 \ 64 \的Client_1 \ BIN; C:\窗口\ system32; C:\ WINDOWS; C ^ :\ Windows \ System32下\ WBEM; C:\ Windows \ System32下\ WindowsPowerShell \ V1.0 \

如何删除第一个条目并将其添加到列表末尾?我知道你可以使用setx,但我宁愿使用PowerShell。

3 个答案:

答案 0 :(得分:5)

# Split the existing path into the 1st entry and the rest.
$first, $rest = $env:Path -split ';'

# Rebuild the path with the first entry appended.
$env:Path = ($rest + $first) -join ';'

# To make this change persistent for the current user, 
# an extra step is needed:
[Environment]::SetEnvironmentVariable('Path', $env:Path, 'User')

答案 1 :(得分:0)

快速简单的方法:

$values = 'C:\oracle\product\11.2.0\32bit\client_1\bin;C:\oracle\product\11.2.0\64bit\client_1\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WIN DOWS\System32\WindowsPowerShell\v1.0\' -split ';'                                    #'

$result = $values[$values.Count-1] + ';'   
for($i = 1; $i -lt $values.Count-1; $i++){ $result += $values[$i] + ';' }
$result += $values[0]

$result

答案 2 :(得分:-1)

我不太熟悉PowerShell脚本,但我相信你可以在其中编写简单的C#。如果是这样,那么也许C#有帮助。

请注意,有三个PATH环境变量可供选择:给予进程的变量,给用户的一个以及给予机器本身的变量。对于下面的演示代码,我选择了一个用于该过程。

var whichPath = EnvironmentVariableTarget.Process;

string path = Environment.GetEnvironmentVariable("PATH", whichPath);

string [] pathEntries = path.Split(';');

if (pathEntries.Length > 1)
{
    // Initialize to the necessary length, for efficiency.
    var sb = new StringBuilder(capacity: path.Length);
    for(int i = 1; i < pathEntries.Length; ++i)
    {
        sb.Append(pathEntries[i]).Append(';');
    }
    sb.Append(pathEntries[0]).Append(';');

    Environment.SetEnvironmentVariable("PATH", sb.ToString(), target: whichPath);
}