$basePath = "C:\Logs" $files = Get-ChildItem -Path $basePath -Recurse - Include *.log $count = 0 foreach ($file in $files) { $relativePath = $file.FullName -replace [regex]::Escape($basePath), '' $depth = ($relativePath.TrimStart('\').Split('\').Count) - 1 if ($depth -le 2) { $count++ } } Write-Output "Total files: $count" Após a execução desse script PowerShell, será exibida a contagem do número de arquivos .log no diretório
AC:\Logs e nos que estiverem em até dois níveis de subdiretórios.
BC:\Logs e nos que estiverem em até um nível de subdiretório.
CC:\Logs, apenas.
DC:\Logs e em todos os subdiretórios.
Revelar gabarito e comentário▾
GabaritoA — C:\Logs e nos que estiverem em até dois níveis de subdiretórios.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
PowerShell: contagem de arquivos por profundidade
Gabarito: letra A. O script conta os arquivos .log localizados em C:\Logs e nos subdiretórios até dois níveis de profundidade, pois o cálculo $depth = ($relativePath.TrimStart('\').Split('\').Count) - 1 atribui profundidade 0 aos arquivos diretamente em C:\Logs, 1 aos que estão em um subdiretório, 2 aos que estão em dois níveis, e assim por diante — e a condição if ($depth -le 2) inclui exatamente os de profundidade 0, 1 e 2.
O script usa o cmdlet Get-ChildItem com os parâmetros -Recurse e -Include *.log para obter recursivamente todos os arquivos com extensão .log a partir do diretório base C:\Logs. Para cada arquivo, ele calcula o caminho relativo removendo o prefixo C:\Logs (usando -replace com [regex]::Escape para tratar a barra invertida como literal). Em seguida, remove a barra inicial, divide o caminho relativo pelo separador \ e conta o número de segmentos resultantes. O valor $depth é esse número menos 1, o que significa:
Arquivo diretamente em C:\Logs → caminho relativo vazio (após remover a barra inicial) → Split('\') retorna um array com um elemento vazio → Count = 1 → $depth = 0.
Arquivo em C:\Logs\sub1 → caminho relativo sub1 → Count = 1 → $depth = 0? Não! Vamos recalcular com cuidado: $relativePath para C:\Logs\sub1\file.log é \sub1\file.log (após remover C:\Logs). TrimStart('\') remove a barra inicial, resultando em sub1\file.log. Split('\') produz ['sub1', 'file.log'], com Count = 2. Então $depth = 2 - 1 = 1. Correto: um nível de subdiretório.
Arquivo em C:\Logs\sub1\sub2\sub3\file.log → Count = 4 → $depth = 3, que não é <= 2, então não é contado.
Portanto, a condição $depth -le 2 inclui arquivos com profundidade 0, 1 e 2, ou seja, os que estão diretamente em C:\Logs e nos subdiretórios de até dois níveis. A alternativa A descreve exatamente isso.
A pegadinha clássica dessa questão é confundir a contagem de segmentos do caminho com a profundidade. Muitos candidatos contam o número de subdiretórios diretamente (ex.: sub1\sub2 = 2 níveis) e esquecem que o script subtrai 1, ou interpretam -le 2 como "até dois níveis" mas erram na base (achando que o diretório raiz conta como nível 1). Outro erro comum é achar que -Recurse sem filtro de profundidade incluiria todos os subdiretórios, mas o script impõe o limite manualmente.
1Caminho relativo (remove C:\Logs)
2Remove barra inicial
3Divide por \ e conta segmentos
4Subtrai 1 → $depth
5Conta se $depth ≤ 2
LEVEL · soulevel.com.br
Alternativa A — ✅ Correta ⟵ GABARITO
Como demonstrado, o script conta arquivos .log em C:\Logs (profundidade 0) e nos subdiretórios de até dois níveis (profundidades 1 e 2). A alternativa A espelha exatamente o comportamento do código: "C:\Logs e nos que estiverem em até dois níveis de subdiretórios".
Alternativa B — ❌ Incorreta
Afirma que a contagem inclui apenas até um nível de subdiretório. Isso subestima o alcance: a condição $depth -le 2 inclui também os arquivos em dois níveis (profundidade 2). O erro aqui é confundir o valor máximo de $depth (2) com o número de níveis de subdiretórios contados a partir do diretório base — na verdade, $depth = 2 corresponde a dois níveis de subdiretórios, não um.
Alternativa C — ❌ Incorreta
Afirma que apenas os arquivos diretamente em C:\Logs são contados. Isso ignora o -Recurse e o cálculo de profundidade: arquivos em subdiretórios de até dois níveis também são incluídos. O script não se limita ao diretório raiz.
Alternativa D — ❌ Incorreta
Afirma que todos os subdiretórios são incluídos, sem limite. O script impõe um limite de profundidade ($depth -le 2), portanto arquivos em níveis mais profundos (3 ou mais) são excluídos. A alternativa D generaliza indevidamente o comportamento do -Recurse, que por si só percorreria toda a árvore, mas o filtro manual restringe a contagem.