Перечислите главный каталог и его подкаталоги, используя свойство directory name в power shell

#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. Хммм … странно … но хорошо, никаких проблем. Снова изменил код. Я бы рекомендовал вам ознакомиться с вычисляемыми свойствами .