Passer du répertoire au répertoire précédent dans Powershell


31

Je suis un gars Linux, mais j'essaie d'être ouvert d'esprit et d'apprendre quelques Powershell. Je manque la possibilité de cd -revenir à un répertoire précédent, comme dans les shells * nix. Existe-t-il une commande similaire dans Powershell - une qui me permettrait de revenir à mon répertoire précédent?


5
Si vous deviez utiliser pushdpour naviguer vers un nouveau répertoire, vous pourriez popdrevenir au précédent. Cela fonctionne dans Bash, PowerShell et même la ligne de commande Windows héritée.
Bob

1
Connexes (sans poser de questions sur Windows, PowerShell ou un équivalent direct de cette commande, donc pas un doublon exact): Comment puis-je passer au répertoire précédent au lieu de monter?
Bob

Réponses:


19

Pas exactement de la même manière que je sache. Une option consiste à utiliser pushd au lieu de cd. Ensuite, popd vous ramènera.

Vous pouvez également modifier votre profil afin que chaque fois qu'une nouvelle invite s'affiche (essentiellement chaque fois que vous appuyez sur Entrée). Il obtiendrait le PWD et le comparerait au précédent. S'ils sont différents, mettez cette valeur sur une pile. Ensuite, vous incluriez une autre fonction dans votre profil appelée quelque chose comme cdb qui ferait sortir le dernier élément de la pile et y irait.

Cela semblait amusant, alors j'ai trouvé une solution. Mettez tout ce code dans votre profil ( 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

Maintenant, vous pouvez cd comme d'habitude et bd vous ramènera sur place dans votre historique de localisation.


11
Ou, vous pouvez simplement alias cdvers pushdet bdvers popd: P
Bob

1
J'y ai pensé. Je préfère juste faire une nouvelle méthode au monkeying avec un alias standard. Celui qui est préféré est très bien sûr. Ce serait la raison pour laquelle je l' ai présenté comme une solution plutôt que la solution.
EBGreen

J'ai eu exactement la même enquête que l'affiche originale et j'ai fini par coller dans les définitions de fonction offertes par @EBGreen.
nomadrc

3

La solution rapide et sale consiste à alias cdet bdà pushdet popd. Une limitation est que vous ne pouvez pas faire l'équivalent de cd -maintes et maintes fois.

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

3

Juste essayé cd -sur Powershell Core 6.2.2et cela fonctionne :)

cd - vous ramène à travers votre historique de localisation

cd + vous fait avancer dans l'historique de vos positions


2

J'ai modifié l'excellent script d'EBGreen pour que cd-vous puissiez toujours revenir à votre répertoire précédent au lieu de parcourir votre historique . De cette façon, l'utilisation de cd-plusieurs fois basculera entre deux répertoires - ce qui est cecd - fait sur les shells 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 et j'ai dû changer la couleur de l'invite en vert :)


0

Vous pouvez également rechercher dans l'historique de vos commandes avec control r et trouver la dernière fois que vous avez entré la commande cd.


Cela fonctionnerait pour un sous-ensemble des scénarios. Comme j'ai tendance à voyager avec des chemins relatifs, cela ne fonctionnerait pas beaucoup de temps.
Kazark
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.