2012-01-26 3 views
1

모든 작업 복사본을 1.6 svn에서 1.7로 업그레이드하는 powershell 스크립트를 작성하고 싶습니다. 문제는 지정된 하위 디렉토리에있는 모든 작업 복사본을 찾아 각각의 첫 번째 일치에서 중지하는 것입니다.모든 svn 작업 복사본을 찾을 Powershell 스크립트

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

디렉토리에서 첫 경기에 엎드려-ChildItem을 중지하고, 하위 디렉토리를 같이 Recurse 처리를 중단 할 수있는 옵션이 있습니다 :이 스크립트는 작업 복사본에 중첩 된 하위 디렉토리를 포함하여 모든을 .svn 디렉토리를 찾을 수 있을까? 보고 싶은 힌트는?

또 다른 옵션은 출력 결과를 얻고 parent \ child dir 관계를 기반으로 일부 논리로 목록을 정렬합니다. 좀 더 혼란스러운 방법이지만, 그것도 옵션입니다 ...

답변

4

나는 그런 파이프 라인에 대한 적절한 필터링 조건을 발견합니다.

이것은 정규식 역 참조와 유사하며 파이프 라인 필터 내부에서 예상대로 작동합니다.

+0

안녕하세요, 나는 같은 필요성을 가지고 있습니다. "어떻게 모든 svn 작업 복사본을 XP에서 승리에 찾을 수"물어 봤어.하지만, 중복을 피하기 위해,이 답변을 확장 할 수 있습니다. powershell. 그냥 코드를 bash 스크립트에 붙여 넣기하여 실행할 수 있습니까? –

+0

아니요, JW, 불행히도이 코드를 bash 스크립트에 붙여 넣을 수 없으며 cmd \ batch도 작동하지 않습니다. 실행하려면 powershell이 ​​필요합니다. 그러나 다행스럽게도 winxp 용 powershell 2.0을 사용할 수 있습니다 (예 : http://j.mp/Hbr88y를 확인하십시오.) 컴퓨터에 무언가를 설치하는 데 여전히 문제가 있다면 - bash에 대해 동일한 스크립트를 찾을 수 있습니다) - bash는 매우 강력하며 스크립트는 쉽게 만들 수 있습니다. (기본적으로 WinXP에서 제공되는) cmd는 경험이 많지 않지만 cmd 스크립트가 너무 짧고 간단하다는 의심을 품습니다. powershell 하나로서. R –

+0

그 주석을 추가 한 이래로 Win XP에서 [cnet.com의 Windows XP 용 Microsoft Windows PowerShell 1.0] (http://www.cnet.com/)을 설치했습니다. 그런 다음 C : \에서 스크립트를 시험해보고'Get-ChildItem : 'C : \ System Volume Information'경로에 대한 액세스가 거부되었습니다. '라는 오류 메시지가 나타납니다. '-ErrorAction SilentlyContinue'을 추가하여 [그것을 수정했습니다.] (http://www.computerperformance.co.uk/powershell/powershell_erroraction_silentlycontinue.htm)를 찾았습니다. 어쨌든 당신이 준 스크립트는 Windows XP의 PowerShell 1에서 제대로 작동했습니다. 감사합니다. –

1

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 
    } 
} 
+0

음, 스크립트는 하나의 작업 복사본 (디렉토리의 첫 번째 복사본) 만 찾은 다음 중단됩니다. 나는 if-condition이 적절하게 수정 될 수 있다고 생각한다. 노력해 주셔서 감사합니다. 나는 그것을 게시 한 후 더 많은 연구를 통해 적절한 답을 찾았다. 추신 : 나는 당신의 대답을 upvote지만 질문 대답으로 받아 들일 수 없습니다. –

+0

@AlexeyShcherbak 귀하의 질문을 해석하는 데 어려움을 겪었습니다. 코드 예제를 기반으로 첫 번째 히트에 대한 처리를 중단하고 "디렉토리에서 첫 번째 일치 항목을 가져오고 하위 디렉토리 처리 반복 중지"요구 사항을 따르기를 원하는 것처럼 보입니다. –

+0

혼란스러운 질문에 대한 죄송합니다 = ( –

관련 문제