Bagaimana Anda mengatur variabel lingkungan untuk satu perintah pada Windows? [duplikat]


20

Apakah ada cara untuk mengatur variabel lingkungan untuk satu perintah pada Windows seperti ENVVAR=abc commandpada Unix?

Variabel yang ditetapkan oleh setperintah pada Windows tampaknya tetap untuk perintah berikut, tetapi ini bukan yang saya inginkan.


Saya pikir Anda harus menghapusnya sendiri.
Zina

Jawaban:


28

Apakah ada cara untuk mengatur variabel lingkungan untuk satu perintah?

Dari cmdshell saat ini :

Anda harus menghapus variabel sendiri.

set ENVVAR=abc && dir & set ENVVAR=

Dari file batch:

Anda bisa menggunakan setlocaldan endlocal.

@echo off
setlocal 
  set ENVVAR=abc && dir
endlocal

Gunakan cmdcangkang anak :

Anda dapat menggunakannya cmd /cuntuk membuat shell anak.

Variabel diatur dalam shell anak dan tidak mempengaruhi shell induk (seperti yang ditunjukkan dalam komentar oleh jpmc26 ).

cmd /C "set ENVVAR=abc && dir"

Bacaan lebih lanjut

  • Indeks AZ dari baris perintah CMD Windows - Referensi yang sangat baik untuk semua hal yang terkait dengan Windows CMD.
  • cmd - Mulai shell CMD baru dan (opsional) menjalankan perintah / program yang dapat dieksekusi.
  • endlocal - Mengakhiri lokalisasi perubahan lingkungan dalam file batch. Pass variabel dari satu file batch ke yang lain.
  • pengalihan - Operator pengalihan.
  • set - Menampilkan, mengatur, atau menghapus variabel lingkungan CMD. Perubahan yang dilakukan dengan SET akan tetap hanya selama durasi sesi CMD saat ini.
  • setlocal - Tetapkan opsi untuk mengontrol visibilitas variabel lingkungan dalam file batch.

Pilihan lain adalah meluncurkan cmdproses terpisah dan mengaturnya di sana. Misalnya cmd /C "set ENVVAR=abc && dir",. Karena itu tidak akan mempengaruhi proses induk, itu akan secara efektif "dihapus" saat keluar.
jpmc26

@ jpmc26 Bagus. Terima kasih. Ditambahkan ke jawaban.
DavidPostill

Metode pertama itu tidak akan menghapus variabel jika perintah gagal.
tidak ada orang

@AndrewMedico Terima kasih. Poin yang bagus. Jawaban sudah diperbaiki.
DavidPostill
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.