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
또는, 당신은 할 수 단지 별칭 cdpushdbdpopdP :

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

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

3

신속하고 더러운 솔루션은 별칭이다 cdbdpushdpopd. 한계는 당신이 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.