Command Prompt - Bagaimana cara menambahkan set path hanya untuk mengeksekusi file batch?

187

Pada dasarnya, saya tahu saya bisa melalui panel kontrol dan memodifikasi variabel path. Tapi, saya bertanya-tanya apakah ada cara untuk melalui pemrograman batch termasuk jalur sementara? Dengan cara itu hanya digunakan selama eksekusi file batch itu. Saya tidak ingin orang masuk dan memodifikasi variabel path mereka hanya untuk menggunakan file batch saya.

michael
sumber

Jawaban:

318

Sama seperti variabel lingkungan lainnya, dengan SET:

SET PATH=%PATH%;c:\whatever\else

Jika Anda ingin memiliki sedikit pemeriksaan keamanan bawaan, periksa untuk melihat apakah jalur baru ada terlebih dahulu:

IF EXIST c:\whatever\else SET PATH=%PATH%;c:\whatever\else

Jika Anda ingin itu bersifat lokal ke file batch itu, gunakan setlocal:

setlocal
set PATH=...
set OTHERTHING=...

@REM Rest of your script

Baca dokumen dengan seksama untuk setlocal/ endlocal, dan lihat referensi lain di situs itu - Fungsinya juga cukup menarik dan sintaksisnya rumit.

The Sintaks Halaman harus Anda mulai dengan dasar-dasar.

Tikar
sumber
3
Jika Anda menambahkan a setlocalke file batch Anda, path hanya terlihat di file
jeb
Bagaimana Anda menambahkan "setlocal"? Apakah itu di tempat "SET"?
michael
@micheal: memperbarui jawaban saya dengan tautan. Silakan baca beberapa dokumentasi / contoh / tutorial tentang skrip cmd - SETbenar-benar sesuatu yang harus Anda ketahui dan pahami sebelum Anda melakukan skrip apa pun.
Mat
2
Penolong. Saya perlu menambahkan EV di server yang tidak bisa dihidupkan ulang dan ini memungkinkan saya untuk melakukan apa yang saya butuhkan tanpa harus menjadwalkan restart!
dav_i
8
Bahkan tanpa SETLOCALitu, paling banyak, hanya akan untuk sesi prompt perintah individu - jika Anda melakukan ini dari lebih dari satu file batch, dan menggunakan EXIT /B %N%, maka SETLOCALpada dasarnya hanya akan membuang perubahan Anda ketika skrip keluar. : - /
BrainSlugs83
21

Ada detail penting:

set PATH="C:\linutils;C:\wingit\bin;%PATH%"

tidak bekerja, sementara

set PATH=C:\linutils;C:\wingit\bin;%PATH%

bekerja. Perbedaannya adalah tanda kutip!

UPD juga melihat komentar oleh venimus

18446744073709551615
sumber
3
sebenarnya itu seharusnya SET "PATH=...%PATH%"ruang lain yang ada di jalur akan menyebabkan kesalahan atau kelakuan buruk. Membungkus tanda kutip seperti ini tidak akan memasukkan mereka tetapi akan mengatur variabel dengan benar. Hal yang sama berlaku untuk variabel env lainnya.
venimus
20

Itu benar, tetapi itu tidak mengubahnya secara permanen, tetapi hanya untuk prompt perintah saat ini, jika Anda ingin mengubahnya secara permanen Anda harus menggunakan misalnya ini:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Ini akan mengubahnya secara permanen dan ya Anda bisa menimpanya dengan skrip batch lain.

dumbak
sumber
Mungkin /mperlu setelah setx?
suzanshakya
Bekerja sama untuk saya, tetapi Win Batch Scripting ini adalah bisnis kecil yang belum selesai dari MS. Di perusahaan saya di mana kami memiliki semua laptop yang sama dengan sistem yang sama, tidak ada skrip universal untuk pengaturan PATH dan kami mempertahankan 2 atau 3 dari mereka, jadi apa pun yang bekerja untuk Anda :)
dumbak
Terima kasih atas pembaruannya. Di Windows Server 2012, ketika saya meletakkan /mdi bagian akhir, DESIRED_PATHditambahkan dengan / m di bagian akhir hanya untuk pengguna saat ini.
suzanshakya
11
Sebuah kata peringatan. Menggunakan setx di jalan, mencoba menambahkan lebih banyak ke dalamnya, dan string> 1024 panjang, saya menemukan bahwa hasilnya (PATH lingkungan saya) terpotong secara permanen. (Suatu hal yang baik yang saya dapat menyalin% PATH% saya telah ECHO keluar sebelum perubahan, dan meletakkannya kembali menggunakan alat windows variabel Lingkungan.)
Andreas Jansson
Perhatian! Perintah ini secara langsung menimpa Variabel Lingkungan Sistem! Saya telah menghapusnya dan mencoba memperbaikinya. Dan juga bagi siapa saja yang melakukan kesalahan ini: jangan restart komputer Anda. Tulis echo %path%dan Anda akan mendapatkan jalur yang dimuat saat ini. Anda perlu membedakan variabel lingkungan Pengguna dan Sistem dari satu sama lain. Kemudian Anda dapat menerapkannya secara manual ke tempat yang benar.
Alper