Назад | Перейти на главную страницу

Ошибка PathTooLongException при использовании Get-ChildItem

Я пытаюсь создать список всех известных файлов в общей папке с атрибутами Archive и Offline.

Но я продолжаю сталкиваться PathTooLongException ошибки.

Пока я только обнаружил, что Robocopy может обходить ошибки длины файла, за исключением того, что я не могу получить такие же "только эти атрибуты"вроде результатов.

Пример:

Get-ChildItem -Attributes A+O -Recurse |Export-Csv E:\temp\StubSearchCorp.csv

Дает:

Get-ChildItem : The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be 
less than 248 characters.
At line:1 char:1
+ Get-ChildItem -Attributes A+O -Recurse |Export-Csv E:\temp\StubSearchA.Corp.cs ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   + CategoryInfo          : ReadError: (F:\Corporate\...e A Train & Ship:String) [Get-ChildItem], PathTooLongException
   + FullyQualifiedErrorId : DirIOError,Microsoft.PowerShell.Commands.GetChildItemCommand

Кто-нибудь знает, как я могу экспортировать в CSV такой список?

Robocopy - это швейцарский армейский нож с МНОГИМИ опциями. Я думаю, что все другие инструменты пострадают от ошибки слишком длинного пути. Вам действительно нужны все свойства, которые Get-ChildItem создает в CSV, или вас интересует только список полностью определенных имен файлов? Если последнее, попробуйте следующее:

ROBOCOPY source dest /IA:AO /FP /NP /S /L /LOG:myfiles.txt

/ L создает список без копирования данных.
/ FP включает полный путь, а не только имя файла.
/ NP подавляет% сообщений о прогрессе в журнале
См. «Параметры выбора файла» из использования Robocopy:
/ IA: [RASHCNETO] :: Включить только файлы с любым из заданных атрибутов.

Нашел решение на основе Powershell в этот ТАК ответ, который объясняет, как игнорировать эти ужасные PathTooLongException регистрации. Вот мое конкретное использование:

Get-ChildItem *.txt -Recurse -ErrorAction SilentlyContinue | Select-String "my pattern"

Для сценария OP это будет:

Get-ChildItem -Attributes A+O -Recurse -ErrorAction SilentlyContinue | Export-Csv "rslt.csv"

Один серьезный недостаток: при этом игнорируются все пути, которые считаются "слишком длинными" на вкус Powershell (как и обещает команда). Однако в моем собственном случае я просто подавляю эти ошибки о node_modules папки. Другие могут приземлиться здесь с той же проблемой, поэтому я все же решил поделиться здесь ...