2016-05-03 2 views
2

J'ai une question. J'ai créé une table de format avec le nom de fichier, le répertoire source et le répertoire de destination. Maintenant, j'essaie de faire une boucle dans la table avec un foreach. Dans cette boucle, je souhaite déplacer les fichiers du répertoire source vers le répertoire de destination. Mon problème est d'obtenir les éléments de la rangée.Powershell Loop à travers Format-Table

Voici mon code exemple:

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 
} 

Répondre

6

Ne jamais utiliser Format-* -cmdlets avant fait avec les données. Même dans ce cas, ne l'utilisez que lorsque vous affichez quelque chose à un utilisateur (ou créez un courrier, etc.) car ils cassent les données d'origine et ne vous laissent que des objets de format spéciaux. Remplacez Format-Table par Select-Object pour obtenir le même résultat tout en conservant les objets utilisables.

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

merci! Cela marche! –

2

L'applet de commande format-table est au format la sortie d'une commande sous forme de tableau. Si vous voulez travailler avec les objets, utilisez un select à la place:

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

Maintenant, vous pouvez accéder aux propriétés comme vous avez essayé dans votre commentaire. Si vous voulez imprimer la table, alors vous pouvez utiliser $table | format-table