Usando Get-ChildItem, mas observe apenas o segundo nível abaixo

0

Isso é provavelmente muito simples, mas não consigo encontrar a resposta. Eu estou procurando uma maneira de olhar apenas no segundo nível abaixo de uma pasta para um arquivo.

ou seja,

C: \ Data

C: \ Data \ Level1

C: \ Data \ Level1 \ Level2 \

Eu só quero olhar no segundo nível, ou seja, C: \ Data \ Level1 \ Level2 \ no exemplo acima.

O que estou perdendo?

Atualmente, estou usando esse script e quero modificá-lo para apenas olhar para baixo no segundo nível e ignorar o primeiro nível.

Get-ChildItem '\nas2\files\-- TV --\*\*' | Where-Object {$_.Name -eq 'folder.jpg'} | ForEach-Object {
$CurrentFolder = $_.Directory
if ((Test-Path "$CurrentFolder\show.jpg") -eq $false)
{Copy-Item $_ "$CurrentFolder\show.jpg"}
Remove-Variable CurrentFolder}

Obrigado pela ajuda

    
por JoshFink 14.10.2014 / 02:43

1 resposta

0

O seguinte verificará o segundo nível da pasta para os casos \ Nas1 \ folder1 \ folder2 e c: \ folder1 \ folder2. Basicamente, cada \\\ S * na regex é um nível.

Editar: adicionou uma verificação adicional para garantir que a pasta de nível 2 contenha um arquivo chamado folder.jpg.

Get-ChildItem 'c:\temp' -recurse | '
Where-Object {($_.directoryname -match '^\\\S*\\S*\\S*$' -or $_.directoryname -match '^\S*\\S*\\S*\\S*$') -and $_.Name -eq 'folder.jpg'} '
| ForEach-Object {
$CurrentFolder = $_.Directory
if ((Test-Path "$CurrentFolder\show.jpg") -eq $false)
{Copy-Item $_ "$CurrentFolder\show.jpg"}
Remove-Variable CurrentFolder}

Caso você tenha nomes de pastas contendo espaços, use este regex:

^\\.*\.*\.*$ 

e

^.*\.*\.*\.*$
    
por 14.10.2014 / 10:53