Потребовалось мне на днях создать перечень файлов с нескольких жёстких дисков и разместить полученные данные в таблицу xls. Иерархия данных на носителях была такой — отдельные файлы лежали в корне папки, а те, что должны быть сгруппированы — пылились в каталогах. Собирать отдельный перечень по файлам в каталогах не требовалось. Нужно было лишь получить общий перечень.
Получился у меня вот такой скрипт:
## Целевая папка ##
$path = "D:\Folder"
## Файл списка ##
$listfile = "D:\list.txt"
## Получаем список файлов в заданной папке и записываем в файл списка ##
(Get-ChildItem -Path $path -Force -File).BaseName | select-string -pattern 'Thumbs' -notmatch | Out-File $listfile
## Получаем список папок и дописываем файл списка ##
(Get-ChildItem -Path $path -Force -Directory).BaseName | Add-Content $listfile
## Сортируем весь список, удаляем висящие строки, сохраняем список ##
$sorted = Get-Content $listfile | Sort-Object | ? {$_.trim() -ne "" } | set-content $listfile
## Открываем созданный файл списка и ждём его закрытия ##
Start-Process -FilePath notepad.exe -ArgumentList $listfile -Wait
## Удаляем файл списка ##
Remove-Item $listfile
Отдельно отмечу фильтрацию файлов с миниатюрами — thumbs.db. Эти файлы остались от прежних версий операционных систем и их наличие на дисках не создаёт никаких проблем, однако в списке они, само собой, не нужны.