Powershell에서 디렉토리를 이전 디렉토리로 변경


31

나는 Linux 사람이지만 열린 마음으로 Powershell을 배우려고합니다. cd -* nix 쉘에서와 같이 이전 디렉토리 로 돌아가는 기능이 없습니다 . Powershell에 비슷한 명령이 있습니까?이 명령을 사용하면 이전 디렉토리로 돌아갈 수 있습니까?


5
pushd새 디렉토리를 탐색하는 데 사용했다면 popd이전 디렉토리로 돌아갈 수 있습니다. 이것은 Bash, PowerShell 및 레거시 Windows 명령 행에서도 작동합니다.
— Bob

1
관련 (Windows, PowerShell 또는이 명령과 동등한 기능을 요구하지는 않으므로 정확한 복제본은 아님) : 위로 이동하지 않고 이전 디렉토리로 변경하려면 어떻게해야합니까?
— Bob

답변:


19

내가 아는 것과 똑같은 방식은 아닙니다. 한 가지 옵션은 cd 대신 push를 사용하는 것입니다. 그러면 팝이 당신을 다시 데려 갈 것입니다.

새 프롬프트가 나타날 때마다 (기본적으로 Enter 키를 누를 때마다) 프로파일을 변경할 수도 있습니다. PWD를 얻어 이전과 비교할 수 있습니다. 서로 다른 경우 해당 값을 스택에 넣습니다. 그런 다음 cdb와 같은 다른 함수를 프로파일에 포함시켜 스택에서 마지막 항목을 꺼내서 CD에 넣습니다.

내가 생각 해낸 이렇게하면 재미있을 것 소리 솔루션입니다. 이 코드를 모두 프로필 ( 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

이제 평상시처럼 CD를 사용할 수 있으며 bd는 위치 기록의 위치로 되돌아갑니다.


11
또는, 당신은 할 수 단지 별칭 cd에 pushd와 bd에 popdP :
— 밥

1
나는 그것에 대해 생각했다. 표준 별칭을 사용하여 원숭이를 만드는 새로운 방법을 선호합니다. 선호되는 것은 물론입니다. 나는 그것을 제시 이유가 될 것이다 솔루션보다는 솔루션입니다.
— EBGreen

나는 원래 포스터와 정확히 같은 질문을 받았으며, @EBGreen이 제공하는 함수 정의에 붙여 넣었습니다.
— nomadrc

3

신속하고 더러운 솔루션은 별칭이다 cd와 bd에 pushd와 popd. 한계는 당신이 cd -반복 해서 동등한 것을 할 수 없다는 것 입니다.

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

3

그냥 시도 cd -에 Powershell Core 6.2.2그것은 작동합니다 :)

cd - 위치 기록을 다시 안내합니다.

cd + 위치 기록을 안내합니다


2

내가 수정 한 EBGreen의 위대한 스크립트를 그 때문에 cd-항상 당신을 데려 갈 것이다 당신의 역사를 통해 반전 대신 이전 디렉토리 . 이 방법으로 cd-여러 번 사용 하면 두 디렉토리 사이를 전환 할 수 있습니다. 이것은 cd -유닉스 쉘에서하는 것입니다.

$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

아, 나는 프롬프트 색상을 녹색으로 변경해야했습니다 :)


0

컨트롤 r을 사용하여 명령 기록을 검색하고 이전에 cd 명령을 입력 한 시간을 찾을 수도 있습니다.


그것은 시나리오의 하위 집합에 효과적입니다. 상대 경로로 여행하는 경향이 있기 때문에 많은 시간이 걸리지 않습니다.
— Kazark
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.