警告!
setx 会将值截断为 1024 个字符。
如果你用它来修改 PATH 你可能会弄乱你的系统。
您可以使用此 PowerShell 代码段向您的路径添加一些内容:
$new_entry = 'c:\blah'
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$new_path = $old_path + ';' + $new_entry
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');
如果您不想重新添加已经存在的条目,则可以这样做(请参阅下面的更好版本):
$new_entry = 'c:\blah'
$search_pattern = ';' + $new_entry.Replace("\","\\")
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$replace_string = ''
$without_entry_path = $old_path -replace $search_pattern, $replace_string
$new_path = $without_entry_path + ';' + $new_entry
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');
这是我现在使用的较新版本(2017-10-23)。此版本正确处理嵌套路径。例如,它处理 PATH 包含“c:\tool\foo”并且您想要添加“c:\tool”的情况。
请注意,这会扩展路径中的值并将它们保存回来展开。如果您想避免这种情况,请查看下面@ErykSun 的评论。
$desired_entry = 'C:\test'
$old_path = [Environment]::GetEnvironmentVariable('path', 'machine');
$old_path_entry_list = ($old_path).split(";")
$new_path_entry_list = new-object system.collections.arraylist
foreach($old_path_entry in $old_path_entry_list) {
if($old_path_entry -eq $desired_entry){
# ignore old entry
}else{
[void]$new_path_entry_list.Add($old_path_entry)
}
}
[void]$new_path_entry_list.Add($desired_entry)
$new_path = $new_path_entry_list -Join ";"
[Environment]::SetEnvironmentVariable('path', $new_path,'Machine');