Định cấu hình Windows Powershell để chỉ hiển thị tên thư mục hiện tại trong dấu nhắc shell


37

Tôi đang sử dụng Powershell trong Windows 7. Làm cách nào để định cấu hình Powershell để nó chỉ hiển thị tên thư mục hiện tại (thay vì đường dẫn đầy đủ) trong dấu nhắc shell?

Ví dụ, Thay vì C:\folder\directory\name>, tôi muốn name>.

Câu trả lời:


57

Bạn phải tùy chỉnh chức năng nhắc trong hồ sơ PowerShell ( %userprofile%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1); nó có thể trống hoặc thậm chí không tồn tại nếu bạn chưa bao giờ sửa đổi nó trước đây.

  1. Mở hồ sơ của bạn (ví dụ: mở tệp đã nói ở trên hoặc trong PowerShell, Notepad $profile)

  2. Thêm phần sau vào hồ sơ của bạn:

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  3. Lưu hồ sơ

  4. Khởi động lại PowerShell

    Tùy chọn . Nếu bạn nhận được thông báo nói rằng bạn không được phép chạy tập lệnh, thì bạn cần sao chép / dán dòng này trong PowerShell:

    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    và khởi động lại.

Chính sách thực thi Windows PowerShell cho phép bạn xác định các điều kiện theo đó Windows PowerShell tải các tệp cấu hình và chạy các tập lệnh.

Bạn có thể đặt chính sách thực thi cho máy tính cục bộ, cho người dùng hiện tại hoặc cho một phiên cụ thể. Bạn cũng có thể sử dụng cài đặt Chính sách nhóm để đặt chính sách thực thi cho máy tính và người dùng.

Nguồn: Tài liệu Microsoft


1
Không hoàn toàn đúng. [System.IO.Directory]::GetCurrentDirectory()không đại diện cho vị trí hiện tại của powershell, mà là thư mục làm việc của quá trình, không phải lúc nào cũng giống nhau. Thay thế bằngGet-Location
zdan

+1, nhưng tôi sẽ sử dụng get-location thay vì GetCurrentDirectory. Hãy nhớ rằng PowerShell không phải lúc nào cũng có nghĩa là hệ thống tệp. Sử dụng snap-in registry, tôi có thể sử dụng cd hkcu:và bây giờ lời nhắc sẽ hoàn toàn tắt.
vcsjones

@Synetech Nó bị chôn vùi khá sâu trong trợ giúp định dạng: \
Bob

1
Bạn cũng có thể sử dụng $PWDthay vì gọi Get-Location. Ví dụ:function prompt { (Split-Path -Leaf $pwd) + '> ' }
Joey

1
Bạn không cần phải xác định prompttrong tập tin hồ sơ của bạn. Nó chỉ phải nằm trong phạm vi phiên toàn cầu. Mặc định có vẻ tương đương với function prompt {"PS " + (Get-Location) + ">"}, trong khi function prompt {""}cho giống như function prompt {"PS>"}. Sử dụng function prompt {" `b"}để nhận được một dấu nhắc trống (ít nhất là trực quan ...).
masterxilo

5

Như một lưu ý bổ sung, tôi không thể thực hiện lệnh của @ Synetech cho đến khi lần đầu tiên tôi tạo hồ sơ $.

  1. Mở PowerShell
  2. Nhập $profilevà nhấn enter. Điều này sẽ hiển thị đường dẫn hồ sơ PowerShell dựa vào, ngay cả khi nó không tồn tại (nó không dành cho tôi). Con đường của tôi khác với những gì @Synetech đã đăng ở trên.

    >$profile
    C:\Users\[username]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
    
  3. Tôi đã phải tạo cả thư mục WindowsPowerShell và tệp Microsoft.PowerShell_profile.ps1.

  4. Thêm mã của @ Synetech và khởi động lại PowerShell.

Chú thích:

Nếu bạn đang sử dụng posh-git (được cài đặt khi sử dụng máy tính để bàn GitHub), tập lệnh của @ Synetech sẽ ghi đè lời nhắc posh-git. Kịch bản nhắc bổ sung cho posh-git ở đây .


1
Nó giống nhau. %userprofile%mở rộng đếnC:\Users\[username]
DavidPostill

@DavidPostill đó là sự hiểu biết của tôi, nhưng PowerShell của tôi không nhận ra% userprofile% là một thư mục. Tôi không tin PowerShell của mình được tùy chỉnh để nhận ra các đường dẫn đó, có lẽ là do cài đặt mạng?
Bryan

2
Cú pháp khác nhau trong PowerShell: $Env:userprofiletương đương vớiecho %userprofile%
DavidPostill

$ profile có giá trị khác trong ISE so với lời nhắc thông thường, bạn có thể phải tạo 2 tệp.
Chris

3

Thay đổi lời nhắc để hiển thị thư mục hiện tại không có đường dẫn đầy đủ và lớn hơn ký hiệu ở cuối:

Một cách có thể là:

Function Prompt { "$( ( get-item $pwd ).Name )>" }

Hoặc là:

Function Prompt { "$( Split-Path -leaf -path (Get-Location) )>" }

Hoặc là:

Function Prompt { "$( ( Get-Location | Get-Item ).Name )>" }

Câu thứ nhất và thứ ba tốt hơn câu trả lời được chấp nhận ở chỗ chúng hoạt động cho các thư mục mạng. Split-Path sẽ không hoạt động chính xác trên một đường dẫn như thế nào \\myserver\my\path.
Chris

2

Tôi thấy việc này khá dễ dàng - kết hợp câu trả lời của @ Synetech và thông tin tìm thấy trong hồ sơ PowerShell . Bởi vì tôi là người mới chơi PS. Các bước của tôi (đối với vscode):

  1. đường dẫn kiểm tra $ profile (trong dấu nhắc lệnh PS - có cấu hình nào được thiết lập không?)
  2. new-item -path $ profile -itemtype file -force (giả sử câu trả lời ở trên là sai)
  3. notepad $ profile (mở notepad)
  4. dán vào

    function prompt {
      $p = Split-Path -leaf -path (Get-Location)
      "$p> "
    }
    
  5. lưu (bạn không cần phải chọn một địa điểm, nó đã được thực hiện cho bạn)
  6. tải lại vscode - bạn có thể sẽ nhận được thông báo về việc chạy tập lệnh (hoặc chỉ thực hiện bước tiếp theo trước khi tải lại)
  7. Set-ExecutPolicy RemoteSign -Scope CurrentUser (tại dấu nhắc PS của bạn, từ câu trả lời SuperUse)

  8. tải lại vscode

Vì vậy, chủ yếu là câu trả lời của @ Synetech (được nâng cấp) với một chút để bắt đầu dễ dàng - đặc biệt là bước 2 làm cho việc này trở nên rất dễ dàng.


0

Dòng duy nhất dưới đây hoạt động tốt với tôi

(Nhận vị trí | Nhận vật phẩm) .Tên


đó không phải là câu hỏi - xem câu trả lời đúng ở trên từ Jelgab
hfrmobile
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.