以下のようにsetx
コマンドを使って環境変数を設定しようとしています
setx PATH “f:\common tools\git\bin;f:\common tools\python\\app;f:\common tools\python\app\scripts;f:\common tools\ruby\bin;f:\masm32\m32\bin;F:\BorlandBCC55\Bin;%PATH%”
しかし、値が1024文字以上になると以下のようなエラーが出ます
警告:保存されているデータは1024文字に切り詰められています
SUCCESS(成功)です。指定した値が保存されました
ただ、最後の方のパスの一部が変数に保存されていないのは、エラーが示すように文字数制限のせいだと思います
82 Madhur Ahuja 2012-02-08
最善の策はレジストリを直接編集することです
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
に移動し、Path
の値を編集します(その後、再起動して新しい値を有効にします)
しかし、非常に長いパスを入力することができますが(2,048 または 32,768 バイト(ソースによって異なります)、長すぎるとすべてのソフトウェアがそれを読み取って正しく処理できるとは限らないことに注意してください
53 Synetech 2012-02-08
windows vista 以上を使用している場合は、フォルダに symbolic link
を作成することができます
mklink /d C:\pf "C:\Program Files"
mklink /d C:\pf86 "C:\Program Files (x86)"
とすると、c:\pf
がプログラムファイルのフォルダになるようにリンクが張られます。このトリックを使って、パスから300文字削ってみました
(setxとは関係ないとは思いますが、1024文字制限でオーバーコミングで検索している人には便利です)
34 Reza 2014-09-11
以下のようなPowerShellスクリプトを使用することができます
$newPath = 'F:\common tools\git\bin;F:\common tools\python\app;F:\common tools\python\app\scripts;F:\common tools\ruby\bin;F:\masm32\bin;F:\Borland\BCC55\Bin'
$oldPath = [Environment]::GetEnvironmentVariable('PATH', 'Machine');
[Environment]::SetEnvironmentVariable('PATH', "$newPath;$oldPath",'Machine');
Environment.SetEnvironmentVariable()
APIコールはWM_SETTINGCHANGE
をブロードキャストするので、再起動の必要はありません
22 Justin Dearing 2012-04-09
オープンソースのSetEnvコマンドラインツールで、PATHなどの環境変数を制限なく編集するのに適しています。動的バッファを使用しているので、1024のような静的な制限はありません
変数に追加するプレフィックスとして % を選択すると、他のバッチローカル変数と一緒に使用した場合に構文が難しくなることがあるので、もっと良い方法があったかもしれません
7 Kharlos Dominguez 2012-06-14
setx よりもはるかに優れたパス操作ツールは pathed.exe です。残念ながら、パスの編集に限定されています
setxよりも優れたユーザーエクスペリエンスに加え、1024文字の制限がありません。直接のレジストリ操作とは異なり、このアプリケーションではEnvironment.SetEnvironmentVariable() API call which will broadcast WM_SETTINGCHANGE
を使用します
4 Justin Dearing 2012-04-09
私のお気に入りの方法は、PATH 変数のフォルダ名を 8.3 の名前を使うように変更することです。このStackOverflowの回答には、PATH変数全体の「縮小版」を生成するスクリプト(.batファイルから実行)があり、これを変数編集ダイアログに貼り付けることができます。唯一の注意点は、SYSTEMとUSERの部分を分割する必要があるということです。スクリプトが各フォルダのミニ化されたバージョンを処理して把握すると、無効なパスや存在しないパスは破棄され、警告が表示されます。ちょっとしたクリーンアップのおまけです
2 Andrew Steitz 2015-12-09
このセリフをBATに入れることができます
setx path "%%path%%;c:\drive\fr;c:\drive\installs\7z"
ダブル%%
を参照してください
(参考にしてください。https://support.microsoft.com/en-us/kb/75634)。)
2 Aminadav Glickshtein 2015-04-21
システムのPATHとユーザーのPATHを別々にしておく必要がない場合は
::setx /m truncate variable length to 1024 REG ADD
REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v PATH /t REG_SZ /f /d "%PATH%"
::empty local path, use system wide only, else it will enlarge with every setx /m
setx PATH ""
::setx is dummy but propagate system wide variables with it
setx /m A A
0 fantastory 2014-10-24
(powerershellを使った)次の方法が一番良いと思います
でコードを見ることができます。https://gist.github.com/drazul/b92f780689bd89a0d2a7
#------------ Add path to system variable -------------------------------------
$path2add = ';C:\path;'
$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');
If (!$systemPath.contains($path2add)) {
$systemPath += $path2add
$systemPath = $systemPath -join ';'
[Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');
write-host "Added to path!"
write-host $systemPath
}
#------------ Delete path from system variable --------------------------------
$path2delete = 'C:\path;'
$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');
$systemPath = $systemPath.replace($path2delete, '')
$systemPath = $systemPath -join ';'
[Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');
write-host "Deleted from path!"
write-host $systemPath
#------------ Clean system variable -------------------------------------------
$systemPath = [Environment]::GetEnvironmentVariable('Path', 'machine');
while ($systemPath.contains(';;')) {
$systemPath = $systemPath.replace(';;', ';')
}
[Environment]::SetEnvironmentVariable('Path', $systemPath, 'Machine');
write-host "Cleaned path!"
write-host $systemPath
0 Drazul 2016-02-04