2016-05-03 7 views
2

Ich habe eine Frage. Ich habe eine Format-Tabelle mit Dateiname, Quell- und Zielverzeichnis erstellt. Jetzt versuche ich mit einer foreach durch die Tabelle zu laufen. Innerhalb dieser Schleife möchte ich die Dateien vom Quell- zum Zielverzeichnis verschieben. Mein Problem ist es, die Gegenstände aus der Reihe zu bekommen.Powershell Loop durch Format-Tabelle

Hier ist mein Beispielcode:

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 
} 

Antwort

6

Niemals Format-* -cmdlets vor Ihrer mit den Daten geschehen. Auch dann, verwenden Sie es nur, wenn Sie einem Benutzer etwas anzeigen (oder eine Mail erstellen), da sie die Originaldaten brechen und nur spezielle Formatobjekte hinterlassen.

Ersetzen Format-Table Mit Select-Object, um das gleiche Ergebnis zu erhalten, während die Verwendung von Objekten.

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

dank verwenden! Das funktioniert! –

2

Das format-table cmdlet ist Format der Ausgang eines Befehls als eine Tabelle. Wenn Sie mit den Objekten arbeiten möchten, verwenden Sie eine select statt:

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

Jetzt können Sie die Eigenschaften zugreifen, wie Sie in Ihrem Kommentar versucht. Wenn Sie die Tabelle ausdrucken möchten, dann können Sie $table | format-table

Verwandte Themen