PathTooLongException erro ao usar Get-ChildItem

4

Estou tentando gerar uma lista de todos os arquivos conhecidos em um compartilhamento de arquivos com os Atributos Archive e Offline .

Mas continuo correndo em PathTooLongException errors.

Até agora, só descobri que o Robocopy pode funcionar após os erros de tamanho de arquivo, exceto que não consigo obter o mesmo tipo de resultado " apenas esses atributos ".

Exemplo:

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

Dá:

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

Alguém está ciente de uma maneira de exportar para o CSV uma lista como essa?

    
por Marcus 07.01.2015 / 06:40

2 respostas

2

Robocopy é um canivete suíço com MUITAS opções. Eu acho que todas as outras ferramentas vão sofrer com o erro muito longo caminho. Você realmente precisa de todas as propriedades que Get-ChildItem produz no CSV, ou está interessado apenas em uma lista de nomes de arquivos completos? Se este último, tente isto:

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

/ L produz uma lista sem copiar dados.
/ FP inclui o caminho completo em vez de apenas o nome do arquivo.
/ NP suprime% de mensagens de progresso no log
Veja as "opções de seleção de arquivo" do uso do Robocopy:
/ IA: [RASHCNETO] :: Incluir apenas arquivos com qualquer um dos conjuntos de atributos fornecidos

    
por 07.01.2015 / 15:15
1

Encontrou uma solução baseada no Powershell em esta resposta SO , que explica como ignorar esses registros PathTooLongException temidos. Aqui está o meu uso específico:

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

Para o cenário do OP, isso equivaleria a:

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

Uma grande desvantagem: isso silenciosamente ignora todos os caminhos que são considerados "muito longos" para o gosto do Powershell (assim como o comando promete). No entanto, no meu caso, apenas mencionei suprimir esses erros sobre as pastas node_modules . Outros podem pousar aqui com o mesmo problema, então eu decidi compartilhar aqui mesmo assim ...

    
por 30.08.2016 / 09:36