2012-07-19 36 views
9

我想要獲取特定子文件夾結構中的文件的遞歸列表,然後將它們保存到表中,以便我可以使用foreach循環來處理每行。我有以下代碼:使用forEach與Get-ChildItem -recurse

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

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

如果我試圖輸出$table原來的樣子,它看上去很完美,對所有文件的兩列數據。如果我嘗試使用foreach(如上所述),我會得到"Unable to index into an object of type Microsoft.PowerShell.Commands.Internal.Format.FormatEndData."錯誤消息。

我在做什麼錯?

回答

9

我不知道你爲什麼試圖通過格式化數據。但實際上,$table只是一個字符串集合。所以你可以做到以下幾點:

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

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

但我不知道你爲什麼想。如果你正在試圖做的對數據進行處理的文件中,你可以試試這個:

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

我想要做的是從gci創建一個數據數組,然後使用foreach循環和一系列「INSERT INTO」命令構建一個SQL表。你的第二個例子正是我所需要的。謝謝! – 2012-07-19 20:10:23

8

在您完成數據處理之前,切勿使用任何格式化命令。 format命令將所有內容都轉換爲字符串,因此您將丟失原始對象。

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

對於它的價值,這個疑難雜症出現不多,所以我敢肯定有一個欺騙的問題就在某個地方。我沒有看到一個很快。如果有人遇到它,帖子和我會得到接近的選票開始。 – EBGreen 2012-07-19 20:00:25