Wechseln Sie in das vorherige Verzeichnis in Powershell


31

Ich bin ein Linux-Typ, aber ich versuche aufgeschlossen zu sein und etwas PowerShell zu lernen. Ich vermisse die Möglichkeit, cd -in ein vorheriges Verzeichnis zurückzukehren, wie in * nix-Shells. Gibt es in Powershell einen ähnlichen Befehl, mit dem ich zum vorherigen Verzeichnis zurückkehren kann?


5
Wenn Sie pushdzum Navigieren zu einem neuen Verzeichnis verwenden, können Sie popdzum vorherigen Verzeichnis zurückkehren . Dies funktioniert in Bash, PowerShell und sogar in der alten Windows-Befehlszeile.
Bob

1
Verwandte Themen (obwohl Sie nicht nach Windows, PowerShell oder einer direkten Entsprechung dieses Befehls fragen, also nicht nach einem exakten Duplikat): Wie kann ich zum vorherigen Verzeichnis wechseln, anstatt aufzusteigen?
Bob

Antworten:


19

Nicht genau so, wie ich es kenne. Eine Möglichkeit ist die Verwendung von pushd anstelle von cd. Dann bringt dich popd zurück.

Sie können Ihr Profil auch so ändern, dass bei jeder neuen Eingabeaufforderung (im Grunde immer, wenn Sie die Eingabetaste drücken). Es würde die PWD erhalten und diese mit der vorherigen vergleichen. Wenn sie unterschiedlich sind, legen Sie diesen Wert auf einen Stapel. Dann würden Sie eine andere Funktion in Ihr Profil aufnehmen, die so etwas wie cdb heißt und das letzte Element vom Stapel nimmt und dorthin cd.

Das klang nach Spaß und ich fand eine Lösung. Fügen Sie den gesamten Code in Ihr Profil ein ( 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

Jetzt können Sie wie gewohnt cden und bd bringt Sie in Ihrem Standortverlauf zurück zu Ihrem Standort.


11
Oder Sie können auch einen Alias cdfür pushdund bdan popd: P
Bob

1
Ich habe darüber nachgedacht. Ich ziehe es einfach vor, eine neue Methode zu erstellen, anstatt mit einem Standardalias zu monkeyen. Was auch immer bevorzugt wird, ist natürlich in Ordnung. Das wäre , warum ich es so präsentiert eine Lösung , anstatt die Lösung.
EBGreen

Ich hatte genau die gleiche Anfrage wie das Originalposter und habe schließlich die von @EBGreen angebotenen Funktionsdefinitionen eingefügt.
Nomadrc

3

Schnelle und schmutzige Lösung ist zu Alias cdund bdzu pushdund popd. Eine Einschränkung ist, dass Sie nicht cd -immer und immer wieder das Äquivalent tun können.

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

3

Gerade versucht cd -auf Powershell Core 6.2.2und es funktioniert :)

cd - führt Sie zurück durch Ihren Standortverlauf

cd + führt Sie weiter durch Ihren Standortverlauf


2

Ich habe das großartige Skript von EBGreen so modifiziert , dass Sie cd-immer zu Ihrem vorherigen Verzeichnis gelangen, anstatt den Verlauf zu durchlaufen . Auf diese Weise wird bei cd-mehrmaliger Verwendung zwischen zwei Verzeichnissen gewechselt - was cd -bei Unix-Shells der Fall ist.

$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 und ich musste die Prompt-Farbe auf Grün ändern :)


0

Sie können Ihren Befehlsverlauf auch mit der Taste r durchsuchen und nach dem Zeitpunkt suchen, zu dem Sie den Befehl cd eingegeben haben.


Das würde für eine Teilmenge der Szenarien funktionieren. Da ich dazu neige, mich auf relativen Wegen fortzubewegen, würde es die meiste Zeit nicht funktionieren.
Kazark
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.