파일 수 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
'programing' 카테고리의 다른 글
| 도커에서 여러 터미널을 여는 방법은 무엇입니까? (0) | 2023.08.15 |
|---|---|
| Android TextView에서 maxLength를 프로그래밍 방식으로 설정하는 방법은 무엇입니까? (0) | 2023.08.15 |
| 다른 사용자가 설치한 앱을 제거하는 방법은 무엇입니까? (0) | 2023.08.15 |
| 배열을 코드로 인쇄 (0) | 2023.08.15 |
| Android ListView 행을 추가 또는 제거하는 애니메이션 방법 (0) | 2023.08.15 |