#powershell #get-childitem
#powershell #get-дочерний элемент
Вопрос:
У меня есть следующая древовидная структура папки с именем test.
Чего я пытаюсь добиться, так это перечислить основной каталог и его подкаталоги под именем каталога столбца, используя свойство Get-ChildItem(код показан ниже).
Вот код, который я написал в powershell :
Get-ChildItem -Path C:UsersUSERDesktoptest -Recurse | Select-Object directoryname, Name, LastWriteTime, CreationTime | Export-Csv -Path 'C:UsersUSERDesktopfiletxt.csv' -Encoding ascii -NoTypeInformation
Чего я добился, так это следующего :
Как вы можете видеть, имя каталога для Folder1 и Folder2 отсутствует, и оно должно было быть взято с тем же именем пути. Аналогично для SubFolder1 имя каталога должно быть Main Path Folder1 и т.д… Мой ожидаемый результат следующий :
Может кто-нибудь, пожалуйста, помочь мне найти решение следующей проблемы? Спасибо
Ответ №1:
Папки не имеют свойства «directoryname». Вы можете использовать вычисляемое свойство с a Split-Path
для извлечения нужной информации.
Get-ChildItem -Path D:sampletest-files -Recurse |
Select-Object -Property @{Name='Path';Expression={Split-Path -Path $_.FullName -Parent}},Name, LastWriteTime, CreationTime, @{Name='Extension';Expression={if (-not $_.PSIsContainer) {$_.Extension}}}
И КСТАТИ: папки на самом деле не имеют «LastWriteTime». Они показывают «LastWriteTime» из самого нового файла, который они содержат. 😉
Комментарии:
1. большое вам спасибо за ваш ответ. Это отлично работает. Однако у меня есть вопрос относительно расширения файлов. В большой папке, которая у меня есть на рабочем столе, у меня есть несколько вложенных папок, содержащих файлы с разными расширениями (пример: .csv, .pdf, .xls). Некоторые из этих файлов имеют имена с ‘.’ внутри . Я хочу попытаться добавить столбец расширения, но он не работает. У вас есть какие-либо подсказки, как это сделать?
2. Да, это работает, спасибо. Однако, если имя было Папкой и оно содержало «.», расширением этого будет «.» и все после точки. Знаете ли вы, как можно исключить расширение on для папок?
3. Вы пробовали это сделать? Папки не имеют расширений. Если в их именах есть точки ‘ . ‘, это часть их имени … это не продолжение. Попробуйте, пожалуйста.
4. Да, я действительно пробовал это. Он по-прежнему показывает в расширении для папки все, что находится после точки. Например, у меня есть папка с именем coursera_lectures12.HongKong . Как только я запускаю код, в столбце расширения я вижу «.HongKong», и мне нужно найти способ или условие для удаления такого senario
5. Хммм … странно … но хорошо, никаких проблем. Снова изменил код. Я бы рекомендовал вам ознакомиться с вычисляемыми свойствами .