dir pastas em uma determinada profundidade de pasta em um arquivo em lotes

4

Eu quero, com um arquivo de lote, poder pesquisar e exibir os arquivos em um monte de pastas chamadas "error" localizadas em vários lugares diferentes.

A pasta de erros está sempre na mesma profundidade de pasta, mas os nomes das pastas antes deles são diferentes.

dir /A-d /b C:\Temp\*random_folder_name*\*random_folder_name*\error

Então, posso criar uma linha que exiba todos os arquivos em todas as pastas de erro, duas pastas "abaixo", neste exemplo "C: \ Temp"? ou eu tenho que adicionar uma linha dir para cada pasta de erro?

    
por Tomas 26.08.2014 / 14:09

4 respostas

4

O Windows 7 e versões posteriores têm um shell de energia:

Você pode tentar:

Get-ChildItem \*\*\*

Isso retorna todos os itens com uma profundidade de duas subpastas. Adicionar * adiciona uma subpasta adicional para pesquisar.

Fonte: link

    
por 26.08.2014 / 15:08
0

Você poderia instalar as bibliotecas GNU Win32 e usar grep para isto:

dir /b /s *.*|grep "error\[^\]*$"

A maneira sugerida para instalá-los é com o getgnuwin32 .

BTW, se você quiser ver os arquivos de texto, será assim:

dir /b /s *.txt|grep "error\[^\]*$"

Se você quiser garantir que apenas pastas de certa profundidade sejam usadas, é um pouco mais complicado:

dir /b /s *.*|grep "^\([^\]*\\)\{7\}error\[^\]*$"

Isso só mostrará resultados onde o diretório de erro tem sete diretórios (do diretório raiz).

    
por 26.08.2014 / 14:31
0

Aqui está uma solução relativamente simples, mas ineficiente, usando FINDSTR com uma expressão regular. Eu uso [\] para corresponder a \ devido a uma inconsistência no Vista.

@echo off
dir /b /s c:\temp\*|findstr /rix "c:[\]temp[\][^\]*[\][^\]*[\]error[\][^\]*"

Aqui está uma solução mais complicada, mas muito eficiente, usando várias declarações FOR.

@echo off
for /d %%A in (c:\temp\*) do for /d %%B in ("%%A\*") do for %%C in ("%%B\error\*") do echo %%C
    
por 27.08.2014 / 04:05
0

O Windows tem alternativas integradas ao grep: find e findstr .

findstr suportará uma expressão regular (você pode obter mais informações digitando help findstr ), mas você será um pouco limitado pela saída de dir , o que não parece oferecer suporte a listagens relativas ...

dir /A-d /S /B | findstr /B /R /I /X "C:\Temp\[^\]*\[^\]*\error\.*"
    
por 26.08.2014 / 15:02