Thay đổi thư mục thành thư mục trước trong Powershell


31

Tôi là một người Linux, nhưng tôi đang cố gắng cởi mở và học hỏi một số Powershell. Tôi bỏ lỡ khả năng cd -quay lại thư mục trước đó, như trong shell * nix. Có một lệnh tương tự trong Powershell, một lệnh có thể cho phép tôi quay lại thư mục trước không?


5
Nếu bạn đã sử dụng pushdđể điều hướng đến một thư mục mới, bạn có thể popdquay lại thư mục trước đó. Điều này hoạt động trong Bash, PowerShell và thậm chí dòng lệnh Windows cũ.
Bob

1
Liên quan (mặc dù không hỏi về Windows, PowerShell hoặc tương đương trực tiếp với lệnh này, vì vậy không phải là bản sao chính xác): Làm cách nào tôi có thể thay đổi thư mục trước đó thay vì đi lên?
Bob

Câu trả lời:


19

Không chính xác trong cùng một thời trang mà tôi nhận thức được. Một lựa chọn là sử dụng Pushd thay vì cd. Sau đó, popd sẽ đưa bạn trở lại.

Bạn cũng có thể thay đổi hồ sơ của mình để bất cứ khi nào một dấu nhắc mới xuất hiện (về cơ bản bất cứ khi nào bạn nhấn enter). Nó sẽ nhận được PWD và so sánh với cái trước đó. Nếu chúng khác nhau, sau đó đặt giá trị đó lên một ngăn xếp. Sau đó, bạn sẽ bao gồm một chức năng khác trong hồ sơ của bạn được gọi là một cái gì đó như cdb sẽ bật mục cuối cùng ra khỏi ngăn xếp và cd vào nó.

Điều này nghe có vẻ vui nên tôi đã đưa ra một giải pháp. Đặt tất cả mã này vào hồ sơ của bạn ( about_Profiles ).

[System.Collections.Stack]$GLOBAL:dirStack = @()
$GLOBAL:oldDir = ''
$GLOBAL:addToStack = $true
function prompt
{
    Write-Host "PS $(get-location)>"  -NoNewLine -foregroundcolor Magenta
    $GLOBAL:nowPath = (Get-Location).Path
    if(($nowPath -ne $oldDir) -AND $GLOBAL:addToStack){
        $GLOBAL:dirStack.Push($oldDir)
        $GLOBAL:oldDir = $nowPath
    }
    $GLOBAL:AddToStack = $true
    return ' '
}
function BackOneDir{
    $lastDir = $GLOBAL:dirStack.Pop()
    $GLOBAL:addToStack = $false
    cd $lastDir
}
Set-Alias bd BackOneDir

Bây giờ bạn có thể cd giống như bình thường và bd sẽ đưa bạn trở lại vị trí trong lịch sử vị trí của bạn.


11
Hoặc, bạn chỉ có thể đặt bí danh cdcho pushdbdđến popd: P
Bob

1
Tôi nghĩ về điều đó. Tôi chỉ thích làm một phương pháp mới để đánh lừa với một bí danh tiêu chuẩn. Bất cứ điều gì được ưa thích là tốt tất nhiên. Đó sẽ là lý do tại sao tôi đã trình bày nó như một giải pháp chứ không phải là những giải pháp.
EBGreen

Tôi đã có cùng một yêu cầu như poster gốc, và cuối cùng đã dán vào các định nghĩa chức năng được cung cấp bởi @EBGreen.
du mục

3

Giải pháp nhanh và bẩn là bí danh cdbdđến pushdpopd. Một hạn chế là bạn không thể làm tương đương cd -nhiều lần.

Set-Alias -Name cd -Value pushd  -Option AllScope
Set-Alias -Name bd -Value popd  -Option AllScope

3

Chỉ cần cố gắng cd -trên Powershell Core 6.2.2và nó hoạt động :)

cd - đưa bạn trở lại qua lịch sử vị trí của bạn

cd + đưa bạn về phía trước thông qua lịch sử vị trí của bạn


2

Tôi đã sửa đổi tập lệnh tuyệt vời của EBGreen để cd-sẽ luôn đưa bạn đến thư mục trước đó thay vì đảo ngược lịch sử của bạn . Bằng cách này, sử dụng cd-nhiều lần sẽ chuyển đổi giữa hai thư mục - đó là những gì cd -làm trên shell unix.

$GLOBAL:previousDir = ''
$GLOBAL:currentDir = ''
function prompt
{
    Write-Host "PS $(get-location)>"  -NoNewLine -foregroundcolor Green
    $GLOBAL:nowPath = (Get-Location).Path
    if($nowPath -ne $GLOBAL:currentDir){
        $GLOBAL:previousDir = $GLOBAL:currentDir
        $GLOBAL:currentDir = $nowPath
    }
    return ' '
}
function BackOneDir{
    cd $GLOBAL:previousDir
}
Set-Alias cd- BackOneDir

Oh và tôi đã phải thay đổi dấu nhắc màu thành màu xanh lá cây :)


0

Bạn cũng có thể tìm kiếm trong lịch sử lệnh của mình bằng điều khiển r và tìm lần trước bạn đã nhập lệnh cd.


Điều đó sẽ làm việc cho một tập hợp con của các kịch bản. Khi tôi có xu hướng đi du lịch khắp nơi với những con đường tương đối, nó sẽ không hoạt động nhiều thời gian.
Kazark
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.