Dấu nhắc lệnh - Làm thế nào để chỉ thêm một đường dẫn được thiết lập cho việc thực thi tệp bó đó?


186

Về cơ bản, tôi biết tôi có thể đi qua bảng điều khiển của mình và sửa đổi biến đường dẫn. Nhưng, tôi tự hỏi nếu có một cách để thông qua lập trình hàng loạt có một đường dẫn tạm thời bao gồm? Bằng cách đó, nó chỉ được sử dụng trong quá trình thực thi tập tin đó. Tôi không muốn mọi người đi vào và sửa đổi các biến đường dẫn của họ chỉ để sử dụng tệp bó của tôi.

Câu trả lời:


317

Cũng giống như bất kỳ biến môi trường nào khác, với SET:

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

Nếu bạn muốn có một kiểm tra an toàn nhỏ được xây dựng trước, hãy kiểm tra xem liệu đường dẫn mới có tồn tại trước không:

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

Nếu bạn muốn nó là cục bộ của tệp bó đó, hãy sử dụng setlocal:

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

@REM Rest of your script

Đọc tài liệu cẩn thận cho setlocal/ endlocal, và xem các tài liệu tham khảo khác trên trang web đó - Các hàm cũng khá thú vị và cú pháp rất khó.

Các Cú pháp trang nên giúp bạn bắt đầu với những điều cơ bản.


3
Nếu bạn thêm một setlocaltệp vào tệp bó của mình, đường dẫn chỉ hiển thị trong tệp
jeb

Bạn có thêm "setlocal" không? Có phải đó là ở vị trí của "TẬP"?
michael

@micheal: cập nhật câu trả lời của tôi với các liên kết. Vui lòng đọc một số tài liệu / ví dụ / hướng dẫn về kịch bản cmd - SETthực sự là điều bạn nên biết và hiểu trước khi thực hiện bất kỳ kịch bản nào.
Mat

2
Cứu người. Tôi cần thêm EV trên máy chủ không thể khởi động lại và điều này cho phép tôi làm những gì tôi cần mà không phải lên lịch khởi động lại!
dav_i

8
Ngay cả khi không có SETLOCALnó, hầu hết, sẽ chỉ dành cho phiên nhắc lệnh riêng lẻ đó - nếu bạn đang thực hiện việc này từ nhiều tệp bó và sử dụng EXIT /B %N%, thì SETLOCALvề cơ bản sẽ chỉ thay đổi các thay đổi của bạn khi tập lệnh thoát. : - /
BrainSlugs83

21

Có một chi tiết quan trọng:

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

không hoạt động, trong khi

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

làm. Sự khác biệt là dấu ngoặc kép!

CẬP NHẬT cũng xem bình luận của venimus


3
trong thực tế, các SET "PATH=...%PATH%"không gian khác tồn tại trong đường dẫn sẽ gây ra lỗi hoặc hành vi sai. Gói trong dấu ngoặc kép như thế này sẽ không bao gồm chúng nhưng sẽ đặt đúng biến. Tương tự làm việc cho bất kỳ biến env khác.
venimus

20

Điều đó đúng, nhưng nó không thay đổi nó vĩnh viễn, nhưng chỉ với dấu nhắc lệnh hiện tại, nếu bạn muốn thay đổi nó vĩnh viễn, bạn phải sử dụng ví dụ này:

setx ENV_VAR_NAME "DESIRED_PATH" /m

Điều này sẽ thay đổi nó vĩnh viễn và có, bạn có thể ghi đè lên nó bằng một tập lệnh bó khác.


Có lẽ /mcần phải sau setx?
suzanshakya

Hoạt động tương tự đối với tôi, nhưng Win Batch Scripting này là một công việc chưa hoàn thành từ MS. Trong công ty của tôi, nơi chúng tôi có tất cả các máy tính xách tay có cùng hệ thống, không có tập lệnh chung cho cài đặt PATH và chúng tôi đang duy trì 2 hoặc 3 trong số chúng, vì vậy bất cứ điều gì phù hợp với bạn :)
dumbak

Cảm ơn các cập nhật. Trong Windows Server 2012, khi tôi đặt /mở cuối, phần DESIRED_PATHbổ sung được thêm vào / m ở cuối chỉ dành cho người dùng hiện tại.
suzanshakya

11
Một lời cảnh báo. Sử dụng setx trên một đường dẫn, cố gắng thêm nhiều hơn vào nó và chuỗi dài> 1024, tôi phát hiện ra rằng kết quả (môi trường PATH của tôi) đã bị cắt ngắn vĩnh viễn. (Một điều tốt là tôi đã có thể sao chép% PATH% mà tôi đã loại bỏ trước khi thay đổi và đưa nó trở lại bằng công cụ cửa sổ biến môi trường.)
Andreas Jansson

Chú ý! Lệnh này ghi đè trực tiếp Biến môi trường hệ thống! Tôi đã xóa chúng và cố gắng sửa chúng. Và cũng cho bất cứ ai đã làm sai lầm này: không khởi động lại máy tính của bạn. Viết echo %path%và bạn sẽ nhận được đường dẫn tải hiện tại. Bạn cần phân biệt các biến môi trường Người dùng và Hệ thống với nhau. Sau đó, bạn có thể tự áp dụng chúng vào đúng nơi.
Alper
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.