Windows에서 최신 파일을 유지하면서 디렉토리에서 오래된 파일을 어떻게 삭제합니까?

StackOverflow https://stackoverflow.com/questions/50902

  •  09-06-2019
  •  | 
  •  

문제

가능한 중복:
N일보다 오래된 파일을 삭제하는 배치 파일

2주가 지난 디렉터리에서 모든 파일을 삭제하는 예약된 Windows 작업을 실행하고 싶습니다.

그 이유는 이것들이 내 서버를 가득 채우고 있는 IIS와 Tomcat 로그인데, 문제를 조사해야 할 경우를 대비해 가장 최근의 로그를 유지하고 싶기 때문입니다.

누구든지 이 작업을 수행하는 쉬운 방법을 알고 있습니까?

건배

니게

도움이 되었습니까?

해결책

정확한 구문: FORFILES /p d:\new /d -30 /m * /c "cmd /c del @file"

다른 팁

가장 간단한 방법은 매주 또는 매월 실행되는 .bat 실행 파일입니다.

cd \mylog\dir
mkdir archive
del /Q .\archive\*.log
move *.log .\archive

un*x와 같은 명령을 사용하기 위해 cygwin 도구를 다운로드하거나 Powershell을 살펴보는 더 복잡한 것을 원한다면.

VBScript 사용 스크립팅답변

Dim fso, startFolder, OlderThanDate
Set fso = CreateObject("Scripting.FileSystemObject")

startFolder = "E:\temp"           ' folder to start deleting (subfolders will also be cleaned)

OlderThanDate = DateAdd("d", -07, Date)  ' 07 days (adjust as necessary)

DeleteOldFiles startFolder, OlderThanDate

Function DeleteOldFiles(folderName, BeforeDate)
    Dim folder, file, fileCollection, folderCollection, subFolder

    Set folder = fso.GetFolder(folderName)

    Set fileCollection = folder.Files

    For Each file In fileCollection
        If file.DateLastModified < BeforeDate Then
            ' fso.DeleteFile(file.Path)    # Modify this to delete after testing
            WScript.StdOut.WriteLine (file.Path)
        End If
    Next

    Set folderCollection = folder.SubFolders
    For Each subFolder In folderCollection
        DeleteOldFiles subFolder.Path, BeforeDate
    Next

End Function

CScript를 사용하여 이 스크립트를 실행할 수 있습니다.

@제이슨:좋은 유틸리티, 리소스 키트의 FORFILES

이를 처리할 배치 파일을 예약하십시오.

이 줄은 c:\mydirectory에서 14일이 지난 모든 파일(*.*)을 삭제합니다.

FORFILES -pc:\mydirectory -s -m*.* -d-14 -c"DEL @FILE"

이를 텍스트 파일에 넣고 이름을 "deletefiles.bat"와 같은 이름으로 바꾸고 예약하십시오.

나는 이것을 테스트하지 않았지만 시도해 볼 만큼 쉬울 것입니다.


편집하다:이것을 사용하는 경우 무슨 일이 일어나고 있는지 확인하십시오. -s 플래그는 하위 디렉토리를 반복하도록 지시하며 이는 원하는 일이 아닐 수도 있습니다.또한 DEL 명령에 대해서도 일부 플래그를 지정해야 할 수도 있습니다.:)


편집하다:해야 한다는 것을 깨달았습니다. Microsoft에서 자료 다운로드 FORFILES가 작동하려면.나는 특별한 것이 필요하지 않기 때문에 허용된 솔루션도 좋아합니다.유일한 문제는 14일보다 오래된 모든 항목을 제거하기 위해 매일 프로세스를 실행하는 대신 2주에 한 번만 발생한다는 것입니다.그만한 가치가 있습니다.:피

배치 파일이나 Powershell 스크립트를 작성하고 예약해 보는 것은 어떨까요?

스크립트 지정된 날짜보다 오래된 파일을 삭제하려면

서버에 Perl(또는 유사한)이 설치되어 있는 경우 수행하는 것은 매우 간단합니다.

#!perl
foreach my $file (</path/to/logs/*.log>) {
  next unless -M $file > 14;
  print "Deleting $file...\n";
  # unlink $file or die "Failed to remove $file: $!";
}

집에 아이들이 있을 수 있으므로 실제로 삭제를 수행하는 줄은 주석 처리되어 있습니다. :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top