Zmień katalog na poprzedni katalog w PowerShell


31

Jestem facetem z Linuksa, ale staram się być otwarty i uczyć się PowerShell. Brakuje mi możliwości cd -powrotu do poprzedniego katalogu, na przykład w powłokach * nix. Czy w Powershell jest podobne polecenie, które pozwoliłoby mi wrócić do poprzedniego katalogu?


5
Jeśli miałbyś użyć pushddo przejścia do nowego katalogu, możesz popdwrócić do poprzedniego. Działa to w Bash, PowerShell, a nawet w starszej linii poleceń Windows.
Bob

1
Powiązane (choć nie pyta o Windows, PowerShell lub bezpośredni odpowiednik tego polecenia, więc nie jest to dokładny duplikat): Jak mogę przejść do poprzedniego katalogu zamiast iść w górę?
Bob

Odpowiedzi:


19

Nie dokładnie w ten sam sposób, o jakim jestem świadomy. Jedną z opcji jest użycie pushd zamiast cd. Wtedy Popd zabierze Cię z powrotem.

Możesz także zmienić swój profil, aby pojawiał się nowy monit (w zasadzie po naciśnięciu klawisza Enter). Dostałby PWD i porównałby go z poprzednim. Jeśli są różne, umieść tę wartość na stosie. Następnie dołączasz do swojego profilu inną funkcję o nazwie cdb, która zrywa ostatni element ze stosu i zapisuje na nim cd.

To brzmiało jak zabawy, więc wpadłem na rozwiązanie. Umieść cały ten kod w swoim profilu ( 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

Teraz możesz cd tak jak normalnie, a bd zabierze Cię z powrotem do lokalizacji w historii lokalizacji.


11
Albo ty mógł tylko alias cddo pushdi bddo popd: P
Bob

1
Myślałem o tym. Po prostu wolę stworzyć nową metodę niż małpować ze standardowym aliasem. To, co jest preferowane, jest oczywiście w porządku. To byłoby dlaczego przedstawiła go jako w roztworze niż w roztworze.
EBGreen

Miałem dokładnie to samo zapytanie co oryginalny plakat i ostatecznie wkleiłem definicje funkcji oferowane przez @EBGreen.
nomadrc

3

Szybki i brudny rozwiązaniem jest alias cdi bddo pushda popd. Ograniczeniem jest to, że nie możesz robić tyle samo, co w cd -kółko.

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

3

Po prostu próbowałem cd -na Powershell Core 6.2.2i to działa :)

cd - zabierze Cię z powrotem do historii lokalizacji

cd + poprowadzi Cię do przodu przez historię lokalizacji


2

Zmodyfikowałem świetny skrypt EBGreen, dzięki czemu cd-zawsze zabierze Cię do poprzedniego katalogu zamiast cofania historii . W ten sposób cd-wielokrotne użycie spowoduje przełączanie między dwoma katalogami - co cd -dzieje się w powłokach uniksowych.

$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

No i musiałem zmienić kolor zachęty na zielony :)


0

Możesz także przeszukiwać historię poleceń za pomocą kontrolki r i znaleźć poprzedni czas wprowadzenia polecenia cd.


To działałoby w przypadku podzbioru scenariuszy. Ponieważ zazwyczaj podróżuję po ścieżkach względnych, nie będzie to często działać.
Kazark,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.