2011-08-17 35 views
6

Tôi đã có một tập tin thực thi sửa đổi biến PATH bằng cách thêm một vài địa chỉ. Khi người dùng log off-then-on, PATH được đặt lại về giá trị ban đầu của nó (trước khi tệp batch được chạy). Hành vi này là OK.Windows CMD - Đặt lại đường dẫn biến từ tập tin thực thi?

Tuy nhiên, nếu tệp lô được chạy nhiều lần, các giá trị giống nhau sẽ được thêm vào trước và tôi kết thúc với biến PATH quá dài, dư thừa chỉ lâu hơn sau mỗi lần chạy hàng loạt.

Tôi muốn đặt lại biến thành bất kỳ thứ gì khi người dùng đăng nhập, trước khi các giá trị được thêm vào trước. Tôi tìm ra giải pháp là viết giá trị ban đầu trong một tệp tạm thời và đọc lại, nhưng có cách nào tốt hơn để làm điều đó không?

Trả lời

6

Thay vì viết các giá trị ban đầu vào một tập tin tạm thời, bạn có thể viết nó vào một biến môi trường:

if not defined ORIGINAL-PATH set ORIGINAL-PATH=%PATH% 
set PATH=c:\extra\stuff;%ORIGINAL-PATH% 

nhưng nó sẽ được tốt hơn để kiểm tra một cách rõ ràng cho dù chuỗi bạn muốn là trong PATH đã hay không , như thế này:

echo %PATH% | findstr /c:"c:\extra\stuff;" > nul || set PATH=c:\extra\stuff;%PATH% 
+0

Đây thực sự là những gì tôi đã làm. Cảm ơn! – Ben

+0

Điều này có lợi ích bổ sung nếu bạn làm hỏng "các thứ phụ" .. bạn có thể sửa nó. Tôi đã quên dấu "\" khi lần đầu tiên tôi làm. Cảm ơn lời khuyên đơn giản nhưng hiệu quả! – granadaCoder

6

Đặt @SETLOCAL ở đầu tệp hàng loạt của bạn.

Mọi thay đổi được thực hiện cho môi trường sẽ được khôi phục khi tệp hàng loạt thoát.

Chạy setlocal /? để biết thêm chi tiết.

1

Tôi đã tìm kiếm một giải pháp lâu dài cho một vấn đề tương tự. Cuối cùng tôi đã kết thúc bằng cách sử dụng pathmgr.cmd mà tôi đã tải về từ:

http://gallery.technet.microsoft.com/Batch-Script-To-Manage-7d0ef21e

Để sử dụng nó để làm sạch PATH người dùng, các tùy chọn dưới đây có thể được sử dụng từ dòng lệnh:

pathmgr.cmd/clean/user/p/y

Nhiều tùy chọn hữu ích khác cũng khả dụng.

Các vấn đề liên quan