none
Get-ChildItem -file -Recurse RRS feed

  • Вопрос

  • при выполнении команды:

    Get-ChildItem -Path R:\folder -file -Recurse

    получаю вывод:

        Directory: R:\Folder\1\FolderOne
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        31.03.2019     17:48     208342 some.pptx
    -a---        31.03.2019     19:37    1655808 picture.png
    
        Directory: R:\Folder\1\FolderTwo
    
    Mode                LastWriteTime     Length Name
    ----                -------------     ------ ----
    -a---        29.03.2019     08:31   23382943 some.pdf

    А как получить вывод:

        Directory: R:\Folder\1\FolderOne
    					some.pptx
    					picture.png
    
        Directory: R:\Folder\1\FolderTwo
    					some.pdf
    

    Т.е. надо один раз вывести название папки, и потом всех файлов в ней.

    Спасибо.

Ответы

  • вообщем, сделал через костыли - одной командой вывел только пути, второй только названия файлов. Совместил всё в Excel - пользователь доволен.
    • Помечено в качестве ответа Anahaym 9 мая 2019 г. 12:38
  • вообщем, сделал через костыли - одной командой вывел только пути, второй только названия файлов. Совместил всё в Excel - пользователь доволен.

    PS C:\TMP> gci -Recurse -File | group DirectoryName | foreach {Write-Host "Directory $($_.name):" ; foreach ($item in $_.group){"`t$($item.name)"}}
    Directory C:\TMP:
            test.txt
            test2.txt
            tets.csv
    Directory C:\TMP\1:
            test.txt
            test1.txt
            test2.txt
    Directory C:\TMP\2:
            test.txt
            test1.txt
    единственное, если такое пустить на c:\windows будет это с пару минут длиться

    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 23 мая 2019 г. 16:30 добавил пропущенный пробел
    • Помечено в качестве ответа Vector BCOModerator 23 мая 2019 г. 16:30
    Модератор

Все ответы

  • так дефолтный вывод как раз так и выводит название каталога а под ним список файлов

    если файлов немного то можно играться с group parentdir и потом форичем пепебирать название группы (оно же название каталога) и содержимое группы (файлы в каталоге)

    такие сортировки довольно ресурсоемки и на сотнях тысяч файлах получите большие просадки по производительности

    есть так же тупой вариант реализации через | out-string | select-string но на выходе вместо удобных обьектов получите строки с которыми не так удобно работать


    The opinion expressed by me is not an official position of Microsoft

    Модератор
  • По умолчанию еще выводится информация: дата, время и вес. Вот от них хочу избавиться.
  • вообщем, сделал через костыли - одной командой вывел только пути, второй только названия файлов. Совместил всё в Excel - пользователь доволен.
    • Помечено в качестве ответа Anahaym 9 мая 2019 г. 12:38
  • вообщем, сделал через костыли - одной командой вывел только пути, второй только названия файлов. Совместил всё в Excel - пользователь доволен.

    PS C:\TMP> gci -Recurse -File | group DirectoryName | foreach {Write-Host "Directory $($_.name):" ; foreach ($item in $_.group){"`t$($item.name)"}}
    Directory C:\TMP:
            test.txt
            test2.txt
            tets.csv
    Directory C:\TMP\1:
            test.txt
            test1.txt
            test2.txt
    Directory C:\TMP\2:
            test.txt
            test1.txt
    единственное, если такое пустить на c:\windows будет это с пару минут длиться

    The opinion expressed by me is not an official position of Microsoft



    • Изменено Vector BCOModerator 23 мая 2019 г. 16:30 добавил пропущенный пробел
    • Помечено в качестве ответа Vector BCOModerator 23 мая 2019 г. 16:30
    Модератор
  • где-то скобочки не хватает...

    gci -Recurse -File | group DirectoryName | foreach {Write-Host "Directory $($_.name):" ; foreach ($item in$_.group){"`t$($item.name)"}}
    At line:1 char:104
    + ...  foreach {Write-Host "Directory $($_.name):" ; foreach ($item in$_.gr ...
    +                                                                  ~
    Missing 'in' after variable in foreach loop.
    At line:1 char:52
    + gci -Recurse -File | group DirectoryName | foreach {Write-Host "Direc ...
    +                                                    ~
    Missing closing '}' in statement block or type definition.
    At line:1 char:115
    + ... ite-Host "Directory $($_.name):" ; foreach ($item in$_.group){"`t$($i ...
    +                                                                 ~
    Unexpected token ')' in expression or statement.
    At line:1 char:135
    + ... rectory $($_.name):" ; foreach ($item in$_.group){"`t$($item.name)"}}
    +                                                                         ~
    Unexpected token '}' in expression or statement.
        + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
        + FullyQualifiedErrorId : MissingInInForeach
  • ошибка моего копирования. добавте 1 пробел после in в этом фрагменте:

    ($item in$_.group)


    The opinion expressed by me is not an official position of Microsoft

    Модератор