2012-07-19 26 views
9

Tôi đang cố gắng lấy danh sách đệ quy các tệp trong cấu trúc thư mục con cụ thể, sau đó lưu chúng vào bảng để tôi có thể sử dụng vòng lặp foreach để làm việc với mỗi hàng. Tôi có đoạn mã sau:Sử dụng ForEach với Get-ChildItem -recurse

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length 

foreach ($row in $table) 
{ 
    $row[0] 
    $row[1] 
} 

Nếu tôi cố gắng ra $table như-là, có vẻ hoàn hảo, với hai cột dữ liệu cho tất cả các tập tin. Nếu tôi cố gắng và bước qua với foreach (như trên), tôi nhận được thông báo lỗi "Unable to index into an object of type Microsoft.PowerShell.Commands.Internal.Format.FormatEndData.".

Tôi đang làm gì sai?

Trả lời

9

Tôi không biết tại sao bạn đang cố gắng duyệt qua dữ liệu được định dạng. Nhưng vì nó là, $table chỉ là một tập hợp các chuỗi. Vì vậy, bạn có thể làm như sau:

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length 

foreach ($row in $table) 
{ 
    $row 
} 

Nhưng tôi không biết tại sao bạn muốn. Nếu bạn đang cố gắng làm điều gì đó với dữ liệu trong tệp, bạn có thể thử điều này:

$files = get-childitem -recurse | where {! $_.PSIsContainer} 
foreach ($file in $files) 
{ 
    $file.Name 
    $file.length 
} 
+0

Những gì tôi đang cố gắng làm là tạo một mảng dữ liệu từ gci, sau đó xây dựng một bảng SQL bằng cách sử dụng vòng lặp foreach và một loạt các lệnh "INSERT INTO". Ví dụ thứ hai của bạn đã cho tôi chính xác những gì tôi cần. Cảm ơn! –

8

Không bao giờ sử dụng bất kỳ lệnh định dạng nào cho đến khi bạn hoàn tất làm việc với dữ liệu. Các lệnh định dạng chuyển đổi mọi thứ thành chuỗi, vì vậy bạn mất các đối tượng gốc.

$table = get-childitem -recurse | where {! $_.PSIsContainer} 
foreach($file in $table){ 
    $file.Name 
    $file.FullName 
} 
+2

Đối với những gì nó đáng giá, chứng nhận này đủ đến mức tôi chắc chắn có câu hỏi ở đó. Tôi không thấy một cách nhanh chóng. Nếu ai đó đi qua nó, đăng bài và tôi sẽ nhận được phiếu bầu bắt đầu. – EBGreen

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