У меня вопрос Я создал форматную таблицу с именем файла, исходным и целевым каталогом. Теперь я пытаюсь перебрать таблицу с помощью 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 ответа
Никогда не используйте 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"}
Командлет 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
Похожие вопросы
Связанные вопросы
Новые вопросы
powershell
PowerShell - это кроссплатформенная утилита командной строки и сценариев от Microsoft. Используйте этот тег только для вопросов о написании и выполнении сценариев PowerShell. Вопросы программирования, относящиеся к кроссплатформенной версии PowerShell Core (Windows, macOS и Linux), должны быть помечены [powershell-core]. Вопросы о системном администрировании следует задавать в случае сбоя суперпользователя или сервера.