programing

파일 수 x개 유지 및 다른 모든 파일 삭제 - Powershell

iphone6s 2023. 8. 15. 10:54
반응형

파일 수 x개 유지 및 다른 모든 파일 삭제 - Powershell

저는 폴더 세트를 살펴보고 마지막 10개의 파일만 보관할 스크립트를 작성하려고 합니다.각 폴더의 파일은 매일, 매주 또는 매월 생성할 수 있습니다.저는 작성일이나 수정일에 상관없이 가장 최근의 10부를 보관할 수 있는 스크립트가 필요합니다.

다른 게시물을 사용하여 아래 스크립트를 만들었지만 10개의 복사본을 보관하지 않고 10일이 지나지 않은 파일을 보관합니다.

$ftppath = "C:\Reports"
Get-ChildItem $ftppath -recurse *_Report_*.zip -force|where {$_.lastwritetime -lt (get-date).adddays(-10)} |Remove-Item -force

제가 이걸 어떻게 작동시킬 수 있을지 생각해 보셨습니까?아래 스크립트를 사용하면 작동하지만 설정하지 않은 경우에만 -Recurse.-Recurse 스위치를 사용하면 스크립트 아래에 나열된 오류가 발생합니다.

# Keeps latest 10 files from a directory based on Creation Time

#Declaration variables
$path = "C:\Reports"                               # For example $path= C:\log\*.tmp
$total= (ls $path).count - 10 # Change number 5 to whatever number of objects you want to keep
# Script
ls $path |sort-object -Property {$_.CreationTime} | Select-Object -first $total | Remove-Item -force

오류: Select-Object: 'First' 매개 변수의 인수를 검증할 수 없습니다.-7 인수는 허용된 최소 범위인 0보다 작습니다.0보다 큰 인수를 입력한 다음 명령을 다시 시도하십시오.

다음 기준으로 정렬할 수 있습니다.CreationTime내림차순으로 시작하여 처음 10을 건너뜁니다.파일이 10개 미만이면 파일을 제거하지 않습니다.

gci C:\temp\ -Recurse| where{-not $_.PsIsContainer}| sort CreationTime -desc| 
    select -Skip 10| Remove-Item -Force

업데이트됨

$path = "C:\TestDir"

# Create 12 test files, 1 second after each other
1..12 | % {
    Remove-Item -Path "$path\$_.txt" -ea SilentlyContinue
    $_ | Out-File "$path\$_.txt"
    Start-Sleep -Seconds 1
}

$files = Get-ChildItem -Path $path -Recurse | Where-Object {-not $_.PsIsContainer}
$keep = 10
if ($files.Count -gt $keep) {
    $files | Sort-Object CreationTime | Select-Object -First ($files.Count - $keep) | Remove-Item -Force -WhatIf
}

제거합니다.-WhatIf에 대한 매개 변수.Remove-Item당신이 진짜로 삭제할 준비가 되었을 때.

@앤디: 제 담당자가 너무 낮아서 댓글을 달 수가 없어요.이상한 결과가 표시되는 경우 Windows 탐색기에서 기본적으로 생성 날짜 대신 마지막으로 수정한 날짜가 표시되기 때문일 수 있습니다.Windows 탐색기에 표시된 결과와 일치하는 결과를 얻으려면 마지막 쓰기 시간을 생성으로 스왑합니다.그런 시간: gci C:\temp\ -Recurse| 여기서 {-not$_.PsIsContainer} | sort LastWriteTime -desc | select -Skip 10 | Remove-Item - Force

SQL 서버에서 이 GCI 명령을 호출하는 방법, 코드 아래에서 시도했지만 오류가 반환되었습니다.

declare @deleteoldtempxe nvarchar(1000)
        set @deleteoldtempxe='powershell.exe gci '+''''+ 'I:\New folder\'+''''+' -Recurse| where{-not $_.PsIsContainer}| sort CreationTime -desc| 
    select -Skip 1| Remove-Item -Force'
    select @deleteoldtempxe

EXEC master.dbo.xp_cmdshell @deleteoldtempxe

언급URL : https://stackoverflow.com/questions/8810580/keep-x-number-of-files-and-delete-all-others-powershell

반응형