निर्देशिका को Powershell में पिछली निर्देशिका में बदलें


31

मैं एक लिनक्स आदमी हूं, लेकिन खुले विचारों वाला और कुछ पॉवर्सशेल सीखने की कोशिश कर रहा हूं। मुझे cd -पिछली निर्देशिका में वापस जाने की क्षमता याद आती है , जैसे * निक्स के गोले। क्या पॉवरशेल में एक समान कमांड है - एक जो मुझे अपनी पिछली निर्देशिका में वापस जाने की अनुमति देगा?


5
यदि आप pushdएक नई निर्देशिका में नेविगेट करने के लिए उपयोग करना चाहते थे , तो आप popdपिछले एक पर वापस आ सकते हैं । यह बाश, पॉवरशेल और यहां तक ​​कि विरासत विंडोज कमांड लाइन में काम करता है।
बॉब

1
संबंधित (हालांकि विंडोज, पावरशैल या इस कमांड के प्रत्यक्ष समकक्ष के बारे में नहीं पूछ रहा है, इसलिए सटीक डुप्लिकेट नहीं): मैं ऊपर जाने के बजाय पिछली निर्देशिका में कैसे बदल सकता हूं?
बॉब

जवाबों:


19

बिल्कुल उसी अंदाज में नहीं, जिससे मैं वाकिफ हूं। एक विकल्प सीडी के बजाय पुशड का उपयोग करना है। फिर popd आपको वापस ले जाएगा।

आप अपनी प्रोफ़ाइल भी बदल सकते हैं ताकि जब भी कोई नया संकेत आए (मूल रूप से जब भी आप हिट दर्ज करें)। यह पीडब्ल्यूडी को मिलेगा और पिछले वाले से तुलना करेगा। यदि वे अलग हैं, तो उस मूल्य को एक स्टैक पर रखें। फिर आप अपने प्रोफाइल में एक और फंक्शन शामिल करेंगे, जिसे cdb की तरह कुछ कहा जाएगा, जो स्टैक और सीडी से अंतिम आइटम को पॉप करेगा।

यह मजाक की तरह लग रहा था इसलिए मैं एक समाधान के साथ आया । इस सभी कोड को अपनी प्रोफ़ाइल ( 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

अब आप सामान्य की तरह सीडी कर सकते हैं और बीडी आपको अपने स्थान के इतिहास में स्थान पर वापस ले जाएगा।


11
या, आप कर सकते थे बस उर्फ cdकरने के लिए pushdऔर bdकरने के लिए popdपी:
बॉब

1
मैंने उसके बारे में सोचा। मैं सिर्फ एक मानक उपनाम के साथ बंदरिंग के लिए एक नई विधि बनाना पसंद करता हूं। जो भी पसंद किया जाता है वह ठीक है। यही कारण है कि हो सकता है कारण है कि मैं यह रूप में प्रस्तुत किया जाएगा एक समाधान के बजाय समाधान।
ईबीग्रीन

मेरे पास मूल पोस्टर के समान सटीक जांच थी, और @EBGreen द्वारा प्रस्तावित फ़ंक्शन परिभाषाओं में चिपकाने के लिए समाप्त हो गया।
खानाबदोश

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

आप नियंत्रण कमांड के साथ अपने कमांड इतिहास के माध्यम से भी खोज सकते हैं, और पिछली बार जब आप सीडी कमांड में प्रवेश करते हैं तो पाते हैं।


यह परिदृश्यों के सबसेट के लिए काम करेगा। जैसा कि मैं रिश्तेदार रास्तों से घूमने जाता हूं, यह बहुत समय तक काम नहीं करेगा।
काज़र्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.