Cambia directory nella directory precedente in Powershell


31

Sono un ragazzo Linux, ma sto cercando di essere di mentalità aperta e imparare un po 'di Powershell. Mi manca la possibilità di cd -tornare a una directory precedente, come nelle shell * nix. Esiste un comando simile in Powershell, uno che mi consentirebbe di tornare alla mia directory precedente?


5
Se dovessi utilizzare pushdper navigare in una nuova directory, potresti popdtornare a quella precedente. Funziona in Bash, PowerShell e persino nella riga di comando di Windows legacy.
Bob,

1
Correlati (anche se non chiedo di Windows, PowerShell o un equivalente diretto di questo comando, quindi non un duplicato esatto): Come posso passare alla directory precedente invece di andare su?
Bob,

Risposte:


19

Non esattamente nello stesso modo di cui sono a conoscenza. Un'opzione è usare pushd invece di cd. Quindi popd ti riporterà indietro.

Puoi anche cambiare il tuo profilo in modo che ogni volta che venga visualizzato un nuovo prompt (praticamente ogni volta che premi invio). Otterrebbe il PWD e lo confronterebbe con quello precedente. Se sono diversi, quindi metti quel valore in una pila. Quindi includeresti un'altra funzione nel tuo profilo chiamata qualcosa come cdb che estrarrebbe l'ultimo elemento dallo stack e lo cd su di esso.

Sembrava divertente, quindi ho trovato una soluzione. Inserisci tutto questo codice nel tuo profilo ( 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

Ora puoi cd come al solito e bd ti riporterà in posizione nella cronologia delle posizioni.


11
Oppure, si potrebbe solo alias cdper pushde bdda popd: P
Bob

1
Ci ho pensato. Preferisco solo fare un nuovo metodo per il monkeying con un alias standard. Qualunque sia preferito va bene, ovviamente. Questo sarebbe il motivo per cui l'ho presentato come una soluzione piuttosto che come soluzione.
EBGreen

Ho avuto la stessa identica richiesta del poster originale e ho finito per incollare le definizioni delle funzioni offerte da @EBGreen.
nomadrc,

3

La soluzione rapida e sporca è alias cde bdto pushde popd. Una limitazione è che non puoi fare l'equivalente cd -ripetutamente.

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

3

Appena provato cd -su Powershell Core 6.2.2e funziona :)

cd - ti riporta indietro alla cronologia delle posizioni

cd + ti porta avanti attraverso la cronologia delle posizioni


2

Ho modificato il fantastico script di EBGreen in modo che cd-ti porti sempre alla tua directory precedente invece di invertire la cronologia . In questo modo, l'utilizzo di cd-più volte commuta tra due directory, che è ciò che cd -fa sulle 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 e ho dovuto cambiare il colore del prompt in verde :)


0

Puoi anche cercare nella cronologia dei comandi con control r e trovare la volta precedente che hai inserito il comando cd.


Funzionerebbe per un sottoinsieme degli scenari. Dato che tendo a viaggiare con percorsi relativi, non funzionerebbe molto.
Kazark
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.