เปลี่ยนไดเรกทอรีเป็นไดเรกทอรีก่อนหน้าใน Powershell


31

ฉันเป็นคนลินุกซ์ แต่พยายามที่จะเปิดกว้างและเรียนรู้ Powershell บางอย่าง ฉันพลาดความสามารถในการcd -กลับไปยังไดเรกทอรีก่อนหน้าเช่นใน * nix shells มีคำสั่งที่คล้ายกันใน Powershell ซึ่งเป็นคำสั่งที่อนุญาตให้ฉันกลับไปยังไดเรกทอรีก่อนหน้าได้หรือไม่


5
หากคุณต้องใช้pushdเพื่อนำทางไปยังไดเรกทอรีใหม่คุณสามารถpopdกลับไปยังไดเรกทอรีก่อนหน้า สิ่งนี้ใช้ได้ใน Bash, PowerShell และแม้แต่บรรทัดคำสั่ง Windows ดั้งเดิม
Bob

1
ที่เกี่ยวข้อง (แม้ว่าจะไม่ได้ถามเกี่ยวกับ Windows, PowerShell หรือเทียบเท่าโดยตรงกับคำสั่งนี้ดังนั้นจึงไม่ซ้ำกันอย่างแน่นอน): ฉันจะเปลี่ยนเป็นไดเรกทอรีก่อนหน้าแทนที่จะขึ้นไปได้อย่างไร
Bob

คำตอบ:


19

ไม่ใช่ในแบบเดียวกันกับที่ฉันรู้ ทางเลือกหนึ่งคือใช้ pushd แทน cd จากนั้นป๊อปจะนำคุณกลับ

นอกจากนี้คุณยังสามารถเปลี่ยนโปรไฟล์ของคุณเพื่อให้เมื่อใดก็ตามที่มีพรอมต์ใหม่เกิดขึ้น (โดยทั่วไปเมื่อใดก็ตามที่คุณกด 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ไปpopd: P
บ๊อบ

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

โอ้และฉันต้องเปลี่ยน prompt-color เป็น green :)


0

คุณสามารถค้นหาประวัติคำสั่งของคุณด้วย control r และค้นหาเวลาก่อนหน้านี้ที่คุณป้อนคำสั่ง cd


ที่จะทำงานสำหรับชุดย่อยของสถานการณ์ เนื่องจากฉันมักจะเดินทางไปกับเส้นทางที่สัมพันธ์กันมันจะไม่ทำงานมากนัก
Kazark
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.