Thực hành tốt nhất cho Windows PATH / quản lý biến môi trường?


22

Ngay bây giờ, nó là một mớ hỗn độn. Mỗi lần tôi cài đặt một chương trình mới làm một việc nhỏ trong dòng lệnh, tôi phải thêm nó vào đường dẫn. Trên thực tế, đôi khi tôi đang phát triển trên Ruby và thậm chí đá quý (plugin / tiện ích mở rộng) đôi khi có các tệp thực thi riêng và được lưu trữ trong các thư mục khác nhau và cuối cùng tôi cũng phải thêm một số đường dẫn cho mỗi ứng dụng. Đã đến lúc tôi đẩy ba mươi con đường trong biến môi trường PATH của mình.

Tôi thận trọng khi sao chép và dán chúng vào một thư mục nhà sắp xếp và đặt đường dẫn đến đó; nó chỉ cảm thấy sai Có một thực hành tốt nhất mà tôi đang thiếu?


Đây là một câu hỏi tuyệt vời - chạy các chương trình rất dễ dàng trên UNIX nhưng lại là một nỗi đau như vậy trên Windows. Thật đáng tiếc khi các giải pháp duy nhất vẫn có vẻ như là công việc khó khăn như vậy ...
dùng10550

Câu trả lời:


13

Một số tiện ích nhỏ khép kín nằm trong %UserProfile%\Appsthư mục của tôi , chẳng hạn như máy lưu trữ và những thứ tương tự. Sau đó, có một số tệp bó tôi đã viết và thường xuyên sử dụng trong đó %UserProfile%\Batches. Đối với phần còn lại, tôi chỉ cần thêm chúng vào PATH, được thực hiện bởi trình cài đặt hoặc với

setx PATH "%PATH%;%CD%"

từ thư mục thích hợp. Số lượng đường dẫn có lẽ chỉ trở thành một vấn đề nếu nội dung quá dài (có giới hạn độ dài cho các biến môi trường).

Bạn có thể (và đôi khi tôi làm) viết các tệp bó nhỏ cho các chương trình như vậy. Chỉ cần sao chép / hardlinking / symlinking thực thi vào một thư mục khác có thể sẽ không hoạt động trên Windows nhưng bạn có thể dễ dàng tạo một tệp bó, ví dụ cho chương trình Foo:

@"%ProgramFiles%\Foosoft Foo\foo.exe" %*

và sau đó bạn có thể thêm thư mục nơi bạn lưu trữ các tệp bó đó vào PATH.


Làm thế nào để các tập tin gói bọc hoạt động? Họ có làm việc chính xác như yêu cầu đường dẫn thực tế? Nếu vậy, điều này là tuyệt vời.
Justin L.

@Justin: Họ chỉ ủy thác tất cả các đối số được cung cấp cho tệp bó cho chương trình thực tế. Nơi cư trú bạn sẽ phải biết chính mình.
Joey

Hừm; Tôi nên làm rõ - có sự khác biệt về chức năng nào giữa việc thêm thư mục của tệp nhị phân vào PATH và tạo một tệp wapper của tệp nhị phân vào một thư mục tùy chỉnh có trên PATH không?
Justin L.

@Justin: Nếu bạn sử dụng lại các tệp bó trong các tệp bó, thì có. Ngoài ra, tôi không biết gì về nó.
Joey

@Joey Tôi thích ý tưởng trình bao bọc, tốt cho việc khởi chạy các chương trình từ cmd, nhưng khi khởi chạy từ đầu..tất cả việc cửa sổ cmd nhảy lên trước khi chương trình khởi chạy, bạn có cách nào không? có vẻ như người ta cũng có thể đặt các thư mục cho tất cả các chương trình trong đường dẫn và để nó dài. Thật gần, nhưng cũng thật xa!
barlop

10

Tôi không chắc chắn về bất kỳ thực hành tốt nhất cụ thể. Nhưng tôi thích sử dụng các công cụ GUI PATH Editor để quản lý các biến PATH. Vì vậy mà nó có thể được duy trì rõ ràng.

Danh sách biên tập viên PATH -

Biên tập môi trường nhanh

Redmond PATH Editor


Các biên tập viên đồ họa có thể làm mọi thứ dễ dàng hơn rất nhiều
Justin L.

Trình soạn thảo Redmond PATH chính xác là thứ mà tôi đang tìm kiếm. +1
Nathan Ridley

Câu hỏi là về việc QUẢN LÝ biến, không chỉ thêm các mục. Vì vậy, đây là câu trả lời đúng nhất và IMO là cách thực hành tốt nhất vì các giải pháp khác ẩn hầu hết nội dung của biến PATH.
taurelas

2

Bây giờ hầu hết các máy Windows đều có PowerShell, tôi sử dụng nhiều lệnh sal / Set-Alias ​​trong hồ sơ người dùng của mình, vì vậy nếu một ứng dụng chỉ có một hoặc hai ứng dụng tôi sử dụng, tôi sẽ tạo bí danh cho hai lệnh đó thay vì thêm toàn bộ thư mục ứng dụng vào đường dẫn. Ví dụ bao gồm SQL Management Studio, Notepad ++, TFS Power Tools (công cụ dòng lệnh, tfpt.exe). Tôi cũng sao chép hồ sơ người dùng của mình trên các máy, vì vậy điều này cho phép tôi kiểm tra sự tồn tại của ứng dụng đó trên máy hiện tại trước khi tạo bí danh (đôi khi cảnh báo nếu ứng dụng không được cài đặt).

filter ctQuoteString { "`"$_`"" }
filter ctResolvePath { Resolve-Path $_ | select -ExpandProperty Path | ctQuoteString } # used in Edit.ps1

$nppExe = "C:\Program Files (x86)\Notepad++\notepad++.exe"
if ((Test-Path variable:\nppExe) -and (Test-Path $nppExe)) {
    function EditNotepadPP { 
        param ([parameter(ValueFromPipelineByPropertyName=$true)][Alias("FullName","FileName")]$Path) 
        begin { if (! $nppExe) { throw 'variable $nppExe is not defined' } }
        process {
            $Path | ctResolvePath | % { # ctResolvePath will get full path and surround with quotes
                & $nppExe $_
            }
            #AddEditHistory $Path #if you need detailed time tracking, might help to create a log what files you're editting
       } 
    }
    Set-Alias npp EditNotepadPP
}

# I have similar functions for other apps.
Set-Alias vs EditVS
Set-Alias tfe EditTFCheckout
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.