У меня вопрос Я создал форматную таблицу с именем файла, исходным и целевым каталогом. Теперь я пытаюсь перебрать таблицу с помощью foreach. Внутри этого цикла я хочу переместить файлы из исходного каталога в целевой. Моя проблема - получить предметы из ряда.

Вот мой пример кода:

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

$filetypes = @("*.llla" , "html")
$table = dir $MovePathSource -Recurse -Include $filetypes | Format-Table@{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
}
2
NightlyDev 3 Май 2016 в 11:47

2 ответа

Лучший ответ

Никогда не используйте Format-* - командлеты, пока не закончите с данными. Даже в этом случае используйте его только при отображении чего-либо пользователю (или создании почты и т. Д.), Поскольку они нарушают исходные данные и оставляют вам только специальные объекты формата.

Замените Format-Table на Select-Object, чтобы получить тот же результат, сохранив при этом используемые объекты.

$table = dir $MovePathSource -Recurse -Include $filetypes |
Select-Object @{Expression={$_.Name};Label="Filename"},@{Expression={($_.DirectoryName)};Label="Sourcepath"},@{Expression={($_.DirectoryName).Replace($MovePathSource,$MovePathDestination)};Label="Destinationpath"}
7
Frode F. 3 Май 2016 в 08:54

Командлет 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

2
Martin Brandl 3 Май 2016 в 08:54