2017-05-17 1 views
1

배열을 사용하여 아래의 스크립트를 여러 경로로 실행하려고합니다. 내 목표는 지난 7 버전을 유지하는 폴더를 삭제하는 것이지만 예상대로 작동하지 않습니다. 작업은 첫 번째 경로 D:\Test1 만 고려합니다.각 폴더를 반복하고 일부를 삭제하십시오

ForEach-Object 이후에 ($folders in $folders)과 같은 것을 추가해야한다고 생각합니다.

내가 여기에 무엇을 놓쳤는가?

$path = @("D:\Test1","D:\Test2","D:\Test3") 
$folders = Get-ChildItem -Path $path -Recurse | 
      Where-Object { $_.PSIsContainer } | 
      Group-Object { $_.Name.Split('_')[0] } | 
      ForEach-Object $Folders { 
      $_.Group | 
      sort CreationTime -Descending | 
      Select -Skip 7 | 
      foreach { Remove-Item $_.FullName -Force -WhatIf } 
      } 

답변

1

이 작업을 수행해야합니다.

$path= @("D:\Test1","D:\Test2","D:\Test3") 
$folders= Get-ChildItem -path $path -Recurse | Where-Object {$_.PsIsContainer} |Group-Object {$_.FullName.Split('_')[0] } 
ForEach($folder in $folders) 
{ 
$folder.Group | sort CreationTime -Descending | Select -Skip 7|% { Remove-Item $_.fullname -Force -whatIf} 
} 

내 로컬에서 테스트했는데 정상적으로 작동합니다. 내가 변수로 가져간 몇 가지 형식화 문제를 제외하고 코드에서 오류를 얻지는 못했지만 너무 많은 파이프 라인 개체에서 엉망이되어 원인을 분류했습니다.

파이프 라인 이후에 foreach를 사용하는 경우 파이프 라인 개체를 하나씩 만 가져옵니다. 그러나 별도로 사용하는 경우 각 반복을 변수에 할당해야합니다.

희망이 있으면 도움이됩니다.

+0

감사합니다. 스크립트가 더 좋아 보이지만 여전히 예상대로 작동하지 않습니다. 즉, 조치가 계정에 첫 번째 경로 "D : \ Test1"을 사용 중이고 나머지는 모두 삭제 중임을 의미합니다. 다음과 같은 두 가지 경로로 테스트 폴더를 만들려면 아래 스크립트를 사용하고 있습니다. 1..10 | Foreach 개체 {새 항목 -ItemType 디렉터리 C : \ Users \ ad_karendex \ Documents \ TEST_1 \ 폴더 _ "$ _"} 1..10 | Foreach 개체 {새 항목 -ItemType 디렉터리 C : \ Users \ ad_karendex \ Documents \ TEST_1 \ Test _ "$ _"} – KarenD

+0

확인해 보겠습니다. @ Taana_CR –

+0

@Ranadip Dutta 감사합니다! – KarenD

0

@Robert Israelsson에서 답변을 얻었습니다!

"그룹 개체를 이름별로 그룹화하지 않고 전체 이름 대신 그룹으로 변경하면 원하는 결과를 얻을 수 있습니다."

$folders= Get-ChildItem -path $path -Recurse | Where-Object {$_.PsIsContainer} |Group-Object {$_.Name.Split('_')[0] } 

사람 : 보낸 사람 :

$folders= Get-ChildItem -path $path -Recurse | Where-Object {$_.PsIsContainer} |Group-Object {$_.FullName.Split('_')[0] } 

그리고이 완벽하게 작동합니다!

관련 문제