2016-05-03 63 views
2

我有一個問題。 我已經創建了一個格式表,文件名,源目錄和目標目錄。 現在我嘗試用foreach循環遍歷表。 在這個循環內,我想將文件從源目錄移動到目標目錄。我的問題是從行中獲取項目。PowerShell循環通過格式 - 表

這裏是我的示例代碼:

cls 
$MovePathSource = "C:\Users\user\Desktop\sourcefolder" 
$MovePathDestination = "C:\Users\user\Desktop\destinationfolder" 

$filetypes = @("*.llla" , "html") 
$table = dir $MovePathSource -Recurse -Include $filetypes | [email protected]{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"} 

$table 

foreach ($row in $table) 
{ 
write-host "$row.Sourcepath" 
#Move-Item -Path ($row.Sourcepath + "\" + $row.Filename) -Destination $row.Destinationpath 
} 

回答

6

與您的數據之前完成切勿使用Format-* -cmdlets。即使這樣,只有在向用戶顯示某些內容(或創建郵件等)時才使用它,因爲它們會破壞原始數據,並且只會留下特殊的格式對象。

替換Format-TableSelect-Object可以在保留可用對象的情況下獲得相同的結果。

$table = dir $MovePathSource -Recurse -Include $filetypes | 
Select-Object @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"} 
+0

謝謝!這工作! –

2

format-table小命令是格式爲表的命令的輸出。如果你想用對象的工作,使用select代替:

$table = dir $MovePathSource -Recurse -Include $filetypes | select @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"} 

現在你可以像你在您的評論試圖訪問屬性。如果你想打印表格,那麼你可以使用$table | format-table