Это, вероятно, действительно просто, но я не могу найти ответ. Я ищу способ поиска файла только на втором уровне.

т.е.

C:\Data

C:\Data\Level1

C:\Data\Level1\Level2\

Я только хочу посмотреть на 2-й уровень, то есть C:\Data\Level1\Level2\ в примере выше.

Что мне не хватает?

В настоящее время я использую этот скрипт и хочу изменить его так, чтобы он смотрел только на 2-м уровне вниз и игнорировал первый уровень.

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}

Спасибо за помощь

1 ответ1

0

Далее будет проверен второй уровень папки для случаев \Nas1 \folder1 \folder2 и c:\folder1 \folder2. В основном каждый \\\S * в регулярном выражении является уровнем.

Изменить: добавлена дополнительная проверка, чтобы убедиться, что папка уровня 2 содержит файл с именем 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}

Если у вас есть имена папок, содержащие пробелы, используйте это регулярное выражение:

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

а также

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .