Saya mencoba mengatur variabel lingkungan menggunakan setx
perintah, seperti berikut
setx PATH "f: \ alat umum \ git \ bin; f: \ alat umum \ python \ app; f: \ alat umum \ python \ app \ skrip; f: \ alat umum \ ruby \ bin; f: \ masm32 \ bin; F: \ Borland \ BCC55 \ Bin;% PATH% "
Namun, saya mendapatkan kesalahan berikut jika nilainya lebih dari 1024 karakter:
PERINGATAN: Data yang disimpan terpotong hingga 1024 karakter.
SUKSES: Nilai yang ditentukan telah disimpan.
Tetapi beberapa jalur pada akhirnya tidak disimpan dalam variabel, saya kira karena batas karakter seperti kesalahan menunjukkan.
windows-7
environment-variables
windows-server-2008-r2
Madhur Ahuja
sumber
sumber
%PATH%
di superuser.com/questions/297947Jawaban:
Taruhan terbaik Anda adalah mengedit registri secara langsung.
Arahkan ke
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
dan editPath
nilainya (lalu reboot untuk mengaktifkan nilai baru).Perhatikan bahwa meskipun Anda dapat memasukkan jalur yang sangat panjang, (hingga panjang variabel lingkungan maksimum; 2.048 atau 32.768 byte tergantung pada sumbernya), tidak semua perangkat lunak akan dapat membaca dan menanganinya dengan benar jika terlalu panjang.
sumber
setx
mengedit registri seperti yang saya sebutkan, lalu menyiarkanWM_SETTINGCHANGE
pesan. Ini memberi tahu semua jendela tingkat atas bahwa pengaturan sistem telah berubah (dalam hal ini variabel lingkungan). Tanpa itu, Explorer dan program yang Anda buka dengannya tidak akan tahu tentang perubahan itu. Anda dapat menyiarkan pesan itu sendiri secara manual (saya menulis sebuah program untuk melakukan hal itu, dan file batch untuk menggantikanSETX
yang membuat mengedit registri diikuti oleh siaran), tetapi sama sepertisetx
dan dialog Properti Sistem envvar, ia memiliki efek samping yang buat boot ulang lebih disukai.:-|
jika Anda menggunakan windows vista atau lebih tinggi, Anda dapat membuat
symbolic link
ke folder. sebagai contoh:akan membuat tautan sehingga
c:\pf
akan menjadi folder file program Anda. Saya mencukur 300 karakter dari jalur saya dengan menggunakan trik ini.(Saya tahu ini tidak terkait dengan setx tetapi berguna untuk orang yang mencari overcomming pada batas 1024 char)
sumber
Anda bisa menggunakan skrip PowerShell yang mirip dengan yang berikut:
The Environment.SetEnvironmentVariable () panggilan API akan disiarkan
WM_SETTINGCHANGE
sehingga Anda tidak perlu reboot.sumber
[Environment]::SetEnvironmentVariable('path', "$newPath;$oldPath",'Machine')
?@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -ExecutionPolicy Bypass -Command "[Environment]::SetEnvironmentVariable('path',\"C:\Program Files (x86)\GNU\GnuPG;$([Environment]::GetEnvironmentVariable('path','Machine'))\",'Machine');"
Alat baris perintah SetEnv sumber terbuka ini baik untuk mengedit PATH dan variabel lingkungan lainnya tanpa batasan. Ini menggunakan buffer dinamis sehingga tidak ada batasan statis seperti 1024.
http://www.codeproject.com/Articles/12153/SetEnv
Pilihan% sebagai awalan untuk menambahkan ke variabel bisa lebih baik, karena membuat sintaks kadang-kadang sulit jika digunakan dengan variabel lokal batch lain ...
sumber
Alat yang jauh lebih unggul daripada setx untuk manipulasi path adalah pathed.exe . Sayangnya, ini terbatas pada pengeditan jalur.
Selain pengalaman pengguna yang unggul dari setx, Anda tidak memiliki batas 1024 karakter. Tidak seperti manipulasi registri langsung, aplikasi ini menggunakan panggilan API Environment.SetEnvironmentVariable () yang akan disiarkan
WM_SETTINGCHANGE
.sumber
Cara favorit saya adalah mengubah nama folder dalam variabel PATH untuk menggunakan nama 8.3. Jawaban StackOverflow ini memiliki skrip yang luar biasa (dijalankan dari file .bat) yang akan menghasilkan versi "minified" dari seluruh variabel PATH, yang kemudian dapat Anda tempelkan ke dialog Edit Variable. Satu-satunya peringatan adalah bahwa Anda perlu membagi bagian SISTEM dan PENGGUNA. Saat skrip berjalan dan mencari tahu versi yang diperkecil untuk setiap folder, skrip akan membuang dan memberi tahu Anda tentang jalur yang tidak valid / tidak ada. Bagus membersihkan bonus.
sumber
fsutil.exe behavior set disable8dot3 1
.fsutil 8dot3name strip
SETELAH menggunakan skrip pasti akan menyebabkan masalah untuk folder yang terpengaruh.fsutil 8dot3name strip
hari sebelumnya dan mempertimbangkan bahwa (a) ia memeriksa registri terlebih dahulu dan (b) jalan disimpan dalam registri, kekhawatiran saya sebelumnya mungkin tidak beralasan, selama pengguna tidak menggunakan opsi/f
(kekuatan) opsi .Anda dapat meletakkan baris ini di BAT Anda:
Lihat dobel
%%
.(Referensi: https://support.microsoft.com/en-us/kb/75634 )
sumber
%path%;c:\...[snip]...\7z
kepath
variabel pengguna , menjatuhkan apa pun yang Anda miliki di sana.%path%
dalam variabel lingkungan jalur lokal seharusnya tidak berpengaruh.jika tidak diperlukan untuk memisahkan sistem PATH dan pengguna PATH:
sumber
Saya pikir cara terbaik adalah yang berikutnya (dengan PowerShell) Dengan cara ini Anda juga menghindari litmit 1024 karakter.
Anda dapat melihat kode di: https://gist.github.com/drazul/b92f780689bd89a0d2a7
sumber