2016-05-03 14 views
2

質問があります。 私はfilename、ソースと宛先のディレクトリでフォーマットテーブルを作成しました。 今、私はforeachでテーブルをループしようとします。 このループの中で、私はソースから宛先ディレクトリにファイルを移動したいと思います。私の問題は、行からアイテムを取得することです。Powershell Loop through Format-Table

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