2012-12-22 14 views
7

में निर्देशिका फ़ोल्डर नाम संग्रहीत करना मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो किसी विशिष्ट निर्देशिका में सभी फ़ोल्डर्स के नाम प्राप्त करेगी और फिर प्रत्येक को सरणी में एक प्रविष्टि के रूप में वापस कर देगा। यहां से मैं एक बड़ा लूप चलाने के लिए प्रत्येक सरणी तत्व का उपयोग करने जा रहा था जो बाद में फ़ंक्शन कॉल के लिए पैरामीटर के रूप में प्रत्येक तत्व का उपयोग करता है। यह सब शक्तिशक्ति के माध्यम से है।ऐरे पावरहेल

function Get-Directorys 
{ 
    $path = gci \\QNAP\wpbackup\ 

    foreach ($item.name in $path) 
    { 
    $a = $item.name 
    } 
} 

$ पथ लाइन सही है और मुझे सभी निर्देशिकाओं का हो जाता है, फिर भी foreach पाश समस्या जहां यह वास्तव में पहले के अलग-अलग वर्ण संग्रहीत करता है:

फिलहाल मैं इस कोड है प्रत्येक निर्देशिका के बजाय निर्देशिका प्रत्येक तत्व के लिए पूर्ण नाम। मैंने कुछ शोध किया है कि कैसे पावरहेल सरणी बनाता है लेकिन मैं थोड़ा उलझन में हूं और इसलिए मैं उम्मीद कर रहा था कि यहां कोई व्यक्ति मुझे सही दिशा में इंगित करने में सक्षम हो सकता है।

आपकी मदद के लिए धन्यवाद।

उत्तर

13

यहाँ एक पाइप लाइन का उपयोग कर एक और विकल्प है।

+0

यह एक और पूरा समाधान है। जवाब के रूप में चिह्नित किया जाना चाहिए। –

+1

यह बहुत उपयोगी है, धन्यवाद: | Foreach-Object {$ _। नाम} – Davos

+0

मेरे मामले में, किसी कारण से, यह सभी डीआईआर नामों को एक स्ट्रिंग में जोड़ता है। – r41n

1

मुझे विश्वास है कि समस्या यह है कि आपका foreach लूप चर $item.name है। आप जो चाहते हैं वह एक लूप वैरिएबल है जिसे $item नाम दिया गया है, और आप प्रत्येक पर name संपत्ति का उपयोग करेंगे।

अर्थात, और

foreach ($item in $path) 
{ 
    $item.name 
} 

भी ध्यान रखें कि मैं $item.name असाइन नहीं किए छोड़ दिया है ले लो। पावरहेल में, यदि परिणाम किसी चर में संग्रहीत नहीं होता है, किसी अन्य कमांड पर पाइप किया जाता है, या अन्यथा कब्जा कर लिया जाता है, तो इसे फ़ंक्शन के रिटर्न वैल्यू में शामिल किया जाता है।

$arr = Get-ChildItem \\QNAP\wpbackup | 
     Where-Object {$_.PSIsContainer} | 
     Foreach-Object {$_.Name} 
+0

आपको बहुत बहुत धन्यवाद। मैंने इसमें बदल दिया और फिर फ़ंक्शन के बाहर एक var को प्रत्येक वापसी मान असाइन किया। यहां से मैं अब इच्छित मूल्य प्राप्त करने के लिए $ [xxx] का उपयोग कर सकता हूं। गैर-संग्रहीत मूल्यों को इस तरह से वापस आने के बारे में आपकी दूसरी टिप्पणी से अनजान था। – Jingles177

+0

हाँ। यह एक छोटा सा गचाचा है जो मुझे एक या दो बार थोड़ा सा करता है, खासकर जब से मुझे यह भी एहसास नहीं हुआ कि उस समय मेरे पास आउटसोर्स आउटपुट था। – jpmc26

3

$ सरणी = (dir * .txt) .FullName

$ सरणी अब निर्देशिका में सभी पाठ फ़ाइलों के लिए रास्तों में से एक सूची है:

3
पूर्णता के लिए

, और पठनीयता:

यह एक सरणी के लिए 'एफ' के साथ शुरू "somefolder" में सभी फाइलों को मिलता है।

$FileNames = Get-ChildItem -Path '.\somefolder\' -Name 'F*' -File 

यह वर्तमान निर्देशिका के सभी निर्देशिकाओं हो जाता है:

$FileNames = Get-ChildItem -Path '.\' -Directory 
1
# initialize the items variable with the 
# contents of a directory 

$items = Get-ChildItem -Path "c:\temp" 

# enumerate the items array 
foreach ($item in $items) 
{ 
     # if the item is a directory, then process it. 
     if ($item.Attributes -eq "Directory") 
     { 
      Write-Host $item.Name//displaying 

      $array=$item.Name//storing in array 

     } 
}