Скрипт Powershell для поиска всех рабочих копий svn - PullRequest
2 голосов
/ 26 января 2012

Я хотел бы написать скрипт powershell для обновления всех рабочих копий с 1.6 svn до 1.7. Проблема состоит в том, чтобы найти все рабочие копии в указанном подкаталоге и остановиться на первом совпадении для каждого. Этот скрипт может найти все .svn каталоги, включая подкаталоги, вложенные в рабочую копию:

Get-ChildItem -Recurse -Force -Path "d:\Projects\" |?{$_.PSIsContainer -and $_.FullName -match ".svn$"}|Select-Object FullName

Есть ли возможность остановить Get-ChildItem при первом совпадении в каталоге и прекратить обработку повторных подкаталогов ? Любые советы, чтобы посмотреть?

Другой вариант - получить выходные результаты и отсортировать \ отфильтровать список с некоторой логикой, основанной на отношениях родительский / дочерний каталог. Немного более запутанный способ, ИМХО, но это также вариант ...

Ответы [ 2 ]

5 голосов
/ 26 января 2012

Я нашел правильное условие фильтрации для такого трубопровода.

$prev = "^$"

Get-ChildItem -Recurse -Force -Include ".svn" -Path "d:\Projects\" `
| ?{$_.PSIsContainer -and $_.Fullname.StartsWith($prev)-eq $false}`
| %{ $prev=$_.Fullname.TrimEnd(".svn"); $prev}

Это похоже на обратную ссылку на регулярное выражение и работает как ожидалось внутри конвейерного фильтра.

1 голос
/ 26 января 2012

Вы можете использовать break. Вот несколько примеров:

Get-ChildItem -Recurse -Force -Path "d:\Projects\" | ? {$_.PSIsContainer } | % {
    if ($_.FullName  -match ".svn$") {
        # 1. Process first hit
            # Code Here... 
        # 2. Then Exit the loop
            break
    }
}

Или немного по-другому:

$dirs = Get-ChildItem -Recurse -Force -Path "d:\Projects\" | ? {$_.PSIsContainer }
foreach ($dir in $dirs) {
    if ($dir.FullName  -match ".svn$") {
        # 1. Process first hit
            # Code Here... 
        # 2. Then Exit the loop
            break
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...