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.

谷口 昂 平
sumber
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.
DavidPostill
sumber
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