Làm thế nào để bạn thiết lập các biến môi trường cho một lệnh duy nhất trên Windows? [bản sao]


20

Có cách nào để đặt biến môi trường cho một lệnh trên Windows như ENVVAR=abc commandtrên Unix không?

Các biến được đặt bởi setlệnh trên Windows dường như vẫn còn cho các lệnh sau, nhưng đây không phải là điều tôi muốn.


Tôi nghĩ bạn sẽ phải tự làm phiền họ.
Zina

Câu trả lời:


28

Có cách nào để đặt biến môi trường cho một lệnh không?

Từ trình cmdbao hiện tại :

Bạn phải tự xóa biến.

set ENVVAR=abc && dir & set ENVVAR=

Từ một tệp bó:

Bạn có thể sử dụng setlocalendlocal.

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

Sử dụng cmdvỏ con :

Bạn có thể sử dụng cmd /cđể tạo một vỏ con.

Biến được đặt trong shell con và không ảnh hưởng đến shell cha (như được chỉ ra trong một nhận xét của jpmc26 ).

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

Đọc thêm

  • Một chỉ mục AZ của dòng lệnh Windows CMD - Một tài liệu tham khảo tuyệt vời cho tất cả những thứ liên quan đến dòng cmd của Windows.
  • cmd - Bắt đầu một vỏ CMD mới và (tùy chọn) chạy một chương trình lệnh / thực thi.
  • endlocal - Kết thúc nội địa hóa các thay đổi môi trường trong một tệp bó. Truyền biến từ tập tin này sang tập tin khác.
  • chuyển hướng - Toán tử chuyển hướng.
  • thiết lập - Hiển thị, đặt hoặc xóa các biến môi trường CMD. Các thay đổi được thực hiện với SET sẽ chỉ duy trì trong suốt thời gian của phiên CMD hiện tại.
  • setlocal - Đặt tùy chọn để kiểm soát mức độ hiển thị của các biến môi trường trong tệp bó.

Một lựa chọn khác là khởi chạy một cmdquy trình riêng và đặt chúng ở đó. Ví dụ cmd /C "set ENVVAR=abc && dir". Vì nó sẽ không ảnh hưởng đến quá trình cha mẹ, nó sẽ được "xóa" một cách hiệu quả khi thoát.
jpmc26

@ jpmc26 Tốt một. Cảm ơn. Thêm vào để trả lời.
DavidPostill

Phương thức đầu tiên đó sẽ không xóa biến nếu lệnh thất bại.
không ai là

@AndrewMedico Cảm ơn. Điểm tốt. Trả lời cố định.
DavidPostill
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.