Mengapa saya dapat menjalankan program yang tidak ada dalam variabel lingkungan PATH saya?

9

Saya bertanya-tanya mengapa perintah java -versionitu dapat diakses secara global ?

Saya bisa menjalankannya dari direktori mana saja dan berfungsi:

masukkan deskripsi gambar di sini

Bagaimana cara kerjanya?

Seperti inilah PATHvariabel sistem saya :

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;
%SystemRoot%\system32;
%SystemRoot%;
%SystemRoot%\System32\Wbem;
%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\

Adapun saya, java.exeterletak di%programfiles%\java\jre7\bin

Pacerier
sumber
2
Lihat di sini .
Daniel Beck
Saya tidak memiliki detail di tangan saat ini yang mengapa ini adalah komentar dan bukan jawaban, tetapi jika java.exe(atau java.com, dll) tidak ada di Anda PATHada entri registri lain yang dapat menentukan jalur yang dapat dieksekusi.
Mark Hurd
1
@MarkHurd cmd (dan CreateProcess) tidak memeriksa entri registri App Paths, hanya ShellExecute [dan karenanya menjalankan dialog].
Acak 832
@ MarkHurd, seperti yang Anda harapkan, itu tidak ada dalam variabel path saya ..
Pacerier
1
@Pacerier Java executable ditemukan di% SystemRoot% \ System32 \
Dwayne Hinterlang

Jawaban:

13

Biasanya, ada sekelompok direktori di mana file yang dapat dieksekusi yang berulang kali digunakan dapat ditemukan oleh Windows Anda, tetapi dalam praktiknya tidak ada alasan khusus untuk menggunakan perintah sebagai global atau tidak. Pengembang dulu memasukkannya sebagai "global" di mana pun mereka mau, mereka bebas untuk melakukannya. Jika Anda ingin menggunakan perintah apa pun sebagai "global", Anda perlu menambahkan perintah sebagai "Variabel Lingkungan Windows" . Untuk melakukan ini, Anda dapat menggunakan metode berikut :

  1. Menambahkan secara manual dengan "Properti Sistem Windows": masukkan deskripsi gambar di sini

  2. Menggunakan alat add-on Setx.exe:

Ini bukan bagian dari pengaturan Windows XP standar tetapi alat baris perintah yang disebut setx.exe termasuk dalam Alat Dukungan Windows XP Paket Layanan 2. Alat ini memperluas perintah yang ditetapkan sehingga perubahan permanen dalam variabel lingkungan dapat dibuat. Misalnya, untuk menambahkan folder C: \ Folder Baru ke jalur, perintahnya adalah

setx path "%PATH%;C:\New Folder" 
  1. Skrip untuk Variabel Lingkungan Daftar:

Perintah "Set" dapat digunakan dalam prompt perintah bersama dengan pengalihan ke file teks untuk membuat daftar variabel lingkungan saat ini. Perintahnya mungkin

set > C:\env_list.txt 

Nama file "C: \ env_list.txt" dapat diganti dengan pilihan Anda.

Microsoft juga memiliki VBScript yang mencantumkan variabel lingkungan di halaman ini .

  1. Kunci Registri untuk Variabel Lingkungan:

Bagi mereka yang berpengalaman dengan mengedit Registry, ada cara lain untuk membuat perubahan pada variabel lingkungan. Variabel lingkungan pengguna disimpan dalam Registry di kunci:

HKEY_CURRENT_USER\Environment

Variabel sistem ditemukan pada kunci:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

Perhatikan bahwa variabel lingkungan apa pun yang ada dalam formulir yang perlu diperluas (misalnya,% PATH%) harus disimpan dalam registri sebagai nilai registri REG_EXPAND_SZ. Mengedit Registry terutama untuk skrip yang digunakan oleh administrator sistem dan tidak disarankan untuk pengguna PC biasa.

Anda dapat menemukan informasi lebih lanjut di sini.

Diogo
sumber
1
Namun, java.exe terletak di %programfiles%\java\jre7\bin. Folder ini tidak muncul dalam variabel Path sistem saya ..
Pacerier
7
Java.exe juga ditemukan di% SystemRoot% \ System32 \ yang muncul dalam variabel PATH Anda
Dwayne Hinterlang
5

"Perintah Global" ditentukan oleh variabel lingkungan Anda.

Tergantung pada OS yang Anda gunakan untuk mengaturnya agak berbeda.

Cara yang paling umum adalah dengan

Klik kanan "My Computer" Pilih "Properties"

Di Windows7 Anda harus memilih "Pengaturan Sistem Lanjut" di panel di sebelah kiri.

Setelah dialog Properti Sistem terbuka, Pilih tab "Advanced".

Di bagian bawah, ada tombol "Variabel Lingkungan"

Dalam Dialog Variabel Lingkungan, Anda akan dapat mengonfigurasi variabel lingkungan per pengguna atau untuk seluruh sistem.

Misalnya, System Variable "Path" yang disederhanakan akan terlihat seperti ini ...

C: \ Program Files \ Java \ jre6 \ bin ; C: \ Ruby19 \ bin;

Dapat dieksekusi di jalur ini dapat dipanggil langsung dari Command Line.

Alasan Anda dapat memanggil calc, mspaint, cmd all dari Run Dialog adalah karena C: \ windows \ system32 ada dalam variabel lingkungan Path.

Anda dapat menambahkan jalur khusus ke variabel lingkungan, berhati-hati untuk tidak menimpa jalur yang ada dan untuk memisahkan jalur menggunakan titik koma. ";"

Anda kemudian dapat menjalankan executable dari path itu langsung di command line tanpa mengetikkan seluruh path, seperti perintah java -version.

Untuk bacaan lebih lanjut silakan lihat tautan berikut ...

Variabel Lingkungan

Memahami dan Mengkonfigurasi Variabel Lingkungan

Pencarian Java.exe pada Instalasi Baru

Dwayne Hinterlang
sumber
3

Berikut ini sederhana whichyang menampilkan semua klik perintah di PATH untuk ekstensi PATHEXT saat ini:

@for %%I in ("%path:;=\" "%") do @for %%E in (%pathext:;= %) do @if exist "%%~dpI%1%%E" @echo %%~dpI%1%%E

Masukkan itu where.cmd(memungkinkan whichuntuk datang dari tempat lain jika Anda mendapatkannya!) Dan menyebutnya dengan where java.

Sekarang, dalam komentar saya di atas, saya menyarankan bahwa jika javatidak tidak muncul dalam Anda PATH, Anda dapat memeriksa di HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths [ref] , tapi setelah benar-benar mencoba ini, itu tidak bekerja dengan baris perintah, hanya dengan hal-hal yang digunakan ShellExecuteEx, seperti Mulai Run dan startperintah CLI.

Mark Hurd
sumber
2

Saat Anda memasukkan perintah, shell melihat variabel lingkungan bernama PATH (% PATH%, $ PATH tergantung pada OS). Itu permintaan setiap direktori di PATH untuk melihat apakah itu menemukan executable yang cocok dengan perintah yang Anda masukkan. Yang pertama ditemukan akan dieksekusi.

Lihat jawaban lain untuk beberapa cara mengatur variabel PATH.

Dennis S.
sumber