警告!
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) があります。このバージョンは、ネストされたパスを正しく処理します。たとえば、「c:\tool\foo」を含む PATH に「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');