2016-08-11 3 views
1

버전 숫자에 따라 디렉토리의 폴더를 정렬하고 이전 폴더를 제거합니다. 내가 겪고있는 문제는 낙지 배포 버전의 표준화 덕분입니다. 동일한 버전의 프로젝트를 여러 번 릴리스하면 숫자는 다음과 같습니다.PowerShell의 버전 번호에 따라 정렬

1.3.5.6 
1.3.5.6_1 
1.3.5.6_2 
1.3.5.7 


그리고 그 밑줄 내 알고리즘을 죽이고있다. 내 기능은 다음과 같습니다.

function CleanUp-Files ($col,$NumberToSave) { 
    foreach ($pkg in $col.FullName) { 
    Get-ChildItem -Path $pkg | 
    Where-Object {$_.PsIscontainer} | 
    Sort-Object { [version]($_.Name -replace '^(\d+(\.\d+){1,3})(_\d{1,2})?$', '$1') } -Descending | 
    Select-Object -Skip $NumberToSave | 
    Remove-Item -Recurse -Force -Verbose 
    } 
} 

밑줄을 정렬하기 위해 수행 할 수있는 작업은 무엇입니까?

답변

1

둘 이상의 인수에서 실행할 수 있습니다.

Sort-Object { [Version]($_ -replace '_.*$') }, { if ($_ -match '_') { [Int]($_ -replace '^.*_') } else { 0 } } 
+0

내가 몰랐어, 내가 다른 데이터 세트를 사용하는 경우 –

1

분할 _으로 Name 부동산 - 출력 후 처음 [version] 대상으로 첫 번째 부분, 마지막 접미사 : 나는 100 개정을 곱 밑줄 뒤의 숫자를 추가

... |Sort-Object { 
     $version,$suffix = $_.Name -split '_' 
     $version -as [version] 
     if($suffix){$suffix} 
} 
+0

귀하의 코드가 잘못 출력을 반환 감사합니다. 3.0.2.2가 3.0.2.13_3 또는 3.0.2.13보다 큰 버전이라고 생각했습니다. 어쩌면 여기서 뭔가를 놓칠 수 있습니다. Chris Dent의 답변으로 올바르게 분류되었습니다. 하지만 내가 너에게서 무언가를 배웠으니 고마워. –

0

:

function CleanUp-Files ($col,$NumberToSave) { 
    $rex = [regex]'(.*\.)(\d+)_?(\d+)?' 
    $callback = { 
     param($match) 
     '{0}{1}' -f $match.Groups[1].Value , ([int]$match.Groups[2].Value * 100 +[int]$match.Groups[3].Value) 
     } 
    foreach ($pkg in $col.FullName) { 
    Get-ChildItem -Path $pkg | 
    Where-Object {$_.PsIscontainer} | 
    Sort-Object { [version]($rex.Replace($_.Name, $callback)) } -Descending | 
    Select-Object -Skip $NumberToSave | 
    Remove-Item -Recurse -Force -Verbose 
    } 
} 

간단한 데모 :

$versions = '1.3.5.6', '1.3.5.6_1', '1.3.5.6_2', '1.3.5.7' 

$rex = [regex]'(.*\.)(\d+)_?(\d+)?' 
$callback = { 
    param($match) 
    '{0}{1}' -f $match.Groups[1].Value , ([int]$match.Groups[2].Value * 100 +[int]$match.Groups[3].Value) 
    } 

$versions | ForEach-Object { 
    [version]($rex.Replace($_, $callback)) 
} 

당신을 줄 것이다 :

Major Minor Build Revision 
----- ----- ----- -------- 
1  3  5  600  
1  3  5  601  
1  3  5  602  
1  3  5  700  
+0

고마워, 나중에 이걸 다른 곳에서 쓸 수있어. –

관련 문제