45 votes

Changer le répertoire en répertoire précédent dans Powershell

Je suis un adepte de Linux, mais j'essaie d'avoir l'esprit ouvert et d'apprendre un peu de Powershell. La possibilité de cd - revenir à un répertoire précédent, comme dans les shells *nix. Existe-t-il une commande similaire dans Powershell-one qui me permettrait de revenir au répertoire précédent ?

21voto

djeidot Points 2143

Pas exactement de la même manière, à ma connaissance. Une option est d'utiliser pushd au lieu de cd. Ensuite, popd vous ramènera en arrière.

Vous pouvez également modifier votre profil de manière à ce que chaque fois qu'une nouvelle invite s'affiche (en fait, chaque fois que vous appuyez sur la touche Entrée). Il récupère le PWD et le compare au précédent. S'il est différent, il place cette valeur sur une pile. Ensuite, vous incluez une autre fonction dans votre profil, appelée quelque chose comme cdb, qui extrait le dernier élément de la pile et y accède.

Ça avait l'air amusant, alors j'ai trouvé a 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 normal et bd vous ramènera sur l'emplacement dans votre historique de localisation.

20voto

th1rdey3 Points 425

J'ai essayé cd - en Powershell Core 6.2.2 et ça marche :)

cd - vous permet de consulter l'historique de vos déplacements

cd + vous fait avancer dans l'histoire de votre localisation

4voto

Oly Dungey Points 246

Je n'ai pas eu de chance avec les cd +/- même si ça devrait fonctionner.

pushd y popd existent depuis longtemps et font bien le travail, mais je n'étais pas sûr qu'ils soient officiellement supportés par Powershell - je viens de découvrir qu'ils sont en fait des alias de Push-Location y Pop-Location qui sont à jour et prises en charge, semble être la meilleure solution :

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/push-location?view=powershell-7 https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/pop-location?view=powershell-7

Suggestion précédente d'utiliser des alias pour remplacer le standard cd sont une bonne idée, mais dans les scripts, j'utilise le nom réel de la cmdlet pour plus de clarté.

3voto

TankorSmash Points 284

La solution rapide et sale consiste à aliaser cd y bd a pushd y popd . Une limitation est que vous ne pouvez pas faire l'équivalent de cd - encore et encore.

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

3voto

nitzel Points 131

J'ai modifié Le grand script d'EBGreen de sorte que cd- vous amènera toujours à votre répertoire précédent au lieu de revenir en arrière dans votre historique . De cette façon, en utilisant cd- plusieurs fois va basculer entre deux répertoires - ce qui est ce que cd - 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 :)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X