2012-12-22 40 views
7

Tôi đang cố gắng viết một tập lệnh sẽ lấy tên của tất cả các thư mục trong một thư mục cụ thể và sau đó trả về từng mục trong một mảng. Từ đây tôi sẽ sử dụng từng phần tử mảng để chạy một vòng lặp lớn hơn sử dụng từng phần tử làm tham số cho một cuộc gọi hàm sau. Tất cả điều này là thông qua powershell.Lưu trữ thư mục thư mục tên vào mảng Powershell

Tại thời điểm này tôi có mã này:

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

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

Các $ path dòng là chính xác và được tôi tất cả các thư mục, tuy nhiên vòng lặp foreach là vấn đề mà nó thực sự lưu trữ các ký tự riêng lẻ của người đầu tiên thư mục thay vì mỗi tên đầy đủ của mỗi giám đốc cho từng phần tử. Tôi đã thực hiện một số nghiên cứu về cách Powershell tạo mảng nhưng tôi hơi bối rối và vì vậy tôi hy vọng ai đó ở đây có thể chỉ cho tôi đúng hướng.

Cảm ơn sự giúp đỡ của bạn.

Trả lời

13

Đây là một lựa chọn sử dụng một đường ống:

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

Đây là một giải pháp hoàn chỉnh hơn. Nên được đánh dấu là câu trả lời. –

+1

điều này hữu ích, cảm ơn: | Foreach-Object {$ _. Name} – Davos

+0

Trong trường hợp của tôi, vì một số lý do, điều này kết hợp tất cả các tên dir vào một chuỗi đơn. – r41n

1

Tôi tin rằng vấn đề là biến số vòng foreach của bạn là $item.name. Điều bạn muốn là biến vòng lặp có tên là $item và bạn sẽ truy cập thuộc tính name trên mỗi biến.

Tức là,

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

Ngoài ra hãy lưu ý rằng tôi đã rời $item.name unassigned. Trong Powershell, nếu kết quả không được lưu trữ trong một biến, được chuyển đến một lệnh khác, hoặc bị bắt, nó được bao gồm trong giá trị trả về của hàm.

+0

Thank you very much. Tôi đã thay đổi điều này và sau đó gán mỗi giá trị trả về cho một var bên ngoài hàm. Từ đây tôi có thể sử dụng $ a [xxx] để lấy giá trị mà tôi muốn. Đã không biết về bình luận thứ hai của bạn về các giá trị không được lưu trữ được trả về theo cách đó. – Jingles177

+0

Vâng. Đó là một chút khó hiểu mà tôi một lần hoặc hai lần, đặc biệt là kể từ khi tôi thậm chí không nhận ra tôi đã unconsumed đầu ra vào thời điểm đó. – jpmc26

3

$ array = (dir * .txt) .FullName

$ mảng bây giờ là một danh sách các đường dẫn cho tất cả các tập tin văn bản trong thư mục.

3

Để có đầy đủ và dễ đọc:

Điều này nhận tất cả các tệp trong "somefolder" bắt đầu bằng 'F' thành mảng.

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

này được tất cả các thư mục của thư mục hiện hành:

$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 

     } 
} 
Các vấn đề liên quan