(x) 일보다 오래된 파일을 삭제 하시겠습니까?


31

(n) 일이 지난 특정 폴더의 모든 파일을 삭제하는 데 유용한 Windows 명령 줄 옵션은 무엇입니까?

또한 수천 개의 명령 셸을 생성하는 것을 좋아하지 않는 한이 파일이 수천 개가 될 수 있으므로 forfiles셸을 사용하는 cmd것은 좋은 생각이 아닙니다. 나는 꽤 불쾌한 해킹을 고려하므로 더 잘 할 수 있는지 보자!

이상적으로는 Windows Server 2008에 내장 된 (또는 쉽게 설치할 수있는) 것입니다.


2
내부 CMD.EXE 명령을 사용하는 .BAT 파일 기반의 새로운 방법은 여기에 게시되었습니다 : stackoverflow.com/questions/9746778/…

답변:


43

나는 조금 더 둘러보고 powershell 방법을 찾았습니다 .

지정된 폴더에서 8 일이 지난 파일을 모두 삭제합니다 (미리보기 포함).

dir |? {$_.CreationTime -lt (get-date).AddDays(-8)} | del -whatif

(-whatif를 제거하여 발생 시키십시오)


1
확인하기 위해 파일을 영구적으로 삭제하거나 재활용합니까?
TimS

암기하기에 너무 어려운 작전 !! 나는 파워 쉘을 좋아하지만 더 나은 방법은 robocopy를
AminM

7

Jeff의 PowerShell 명령을 좋아하지만 PowerShell이없는 Windows 시스템의 대체 vbs 솔루션의 경우 다음을 시도 할 수 있습니다.

다른 이름으로 저장 <filename>.vbs하고 실행하십시오.

<filename>.vbs <target_dir> <NoDaysSinceModified> [Action]

세 번째 매개 변수 [Action]는 선택 사항입니다. 파일이 없으면 파일보다 오래된 파일 <NoDaysSinceModified>이 나열됩니다. 이 설정과 마찬가지로 D그것보다 오래된 파일 삭제<NoDaysSinceModified>

PurgeOldFiles.vbs "c:\Log Files" 8

것입니다 목록 에있는 모든 파일을 c:\Log Files보다 오래된 팔일 된

PurgeOldFiles.vbs "c:\Log Files" 8 D

합니다 삭제 에있는 모든 파일을 c:\Log Files보다 오래된 팔일 된

참고 : 이것은 SQLServerCentral.com 에있는 Haidong Ji의 스크립트 수정 버전입니다.

Option Explicit
on error resume next
    Dim oFSO
    Dim sDirectoryPath
    Dim oFolder
    Dim oFileCollection
    Dim oFile
    Dim iDaysOld
    Dim fAction

    sDirectoryPath = WScript.Arguments.Item(0)
    iDaysOld = WScript.Arguments.Item(1)
    fAction = WScript.Arguments.Item(2)
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    set oFolder = oFSO.GetFolder(sDirectoryPath)
    set oFileCollection = oFolder.Files

If UCase(fAction) = "D" Then
'Walk through each file in this folder collection. 
'If it is older than iDaysOld, then delete it.
    For each oFile in oFileCollection
        If oFile.DateLastModified < (Date() - iDaysOld) Then
            oFile.Delete(True)
        End If
    Next
else
'Displays Each file in the dir older than iDaysOld
    For each oFile in oFileCollection
        If oFile.DateLastModified < (Date() - iDaysOld) Then
            Wscript.Echo oFile.Name & " " & oFile.DateLastModified
        End If
    Next
End If


'Clean up
    Set oFSO = Nothing
    Set oFolder = Nothing
    Set oFileCollection = Nothing
    Set oFile = Nothing
    Set fAction = Nothing

오래된 웹 서버 로그를 삭제하기 위해 이와 같은 것을 사용합니다. 꽤 잘 운동했습니다.
jeffspost

4

별로 커맨드 라인,하지만 사용하여 같은 LINQPad을 C #을 스크립팅 호스트로 :
(단지 나에게 명령 줄의 C # 스크립트에 대한 아이디어를 준 거시기 일품 VBS 파일)

var files = from f in Directory.GetFiles(@"D:\temp", "*.*", SearchOption.AllDirectories)
            where File.GetLastWriteTime(f) < DateTime.Today.AddDays(-8)
            select f;

foreach(var f in files)
    File.Delete(f);

Linq는 정말 대단합니다. PowerShell에 도입되기를 바랍니다.
Taylor Gibb


3

cygwin (또는 다른 대안) "find"명령으로 비슷한 것을 얻을 수 있습니다. 그러나이를 위해서는 cygwin을 설치하거나 휴대용 버전을 준비해야합니다.



2

autoIT를 사용하여 시스템에서이 작업을 수행합니다. .au3 파일을 쉽게 exe로 컴파일 할 수 있다는 점이 마음에 듭니다. 누구나 편집 할 수있는 박쥐 파일이있는 것처럼 보안 결함을 쉽게 도입 할 수는 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.