윈도우10에서 지정된 날짜 경과 시 자동으로 파일 삭제하는 방법

윈도우에서 저장소 센스 구성을 이용 하면 컴퓨터의 저장 공간을 자동으로 확보 할 수 가 있습니다.

하지만 이 기능은 저장소 공간을 제어하는 데 유용할 수 있지만, 사용자가 원하는 경로의 파일을 지정 된 기간 동안 모니터 링 해서 삭제 하는 옵션을 제공 하고 있지는 않습니다.

주기적으로 삭제 해도 되는 파일 이 있다면 특정 위치에 보관 후 PowerShell 및 작업 스케줄러를 사용하여 지정된 일 수보다 오래된 폴더의 파일을 모니터링하고 정리하도록 적용 할 수 있습니다.

그래서 오늘은 윈도우10에서 원하는 날짜가 지나면 자동으로 파일을 삭제하는 방법에 대해서 알아 보겠습니다.

튜토리얼 환경 : 윈도우10 ( 윈도우11 에서도 동일하게 작동 합니다.)

PowerShell 로 지정 일 경과 시 자동으로 파일 삭제하는 방법-기본편

PowerShell 에 명령어 입력으로 지정 일 경과 시 마다 원하는 경로의 파일을 자동으로 삭제하는 방법 입니다.

적용 순서를 안내 하겠습니다.

주의: 잘못된 매개 변수를 입력 하게 되면 중요한 파일이 삭제 될 가능 성이 있으니 임시 폴더 등을 생성 하여 아래 명령을 테스트해보길 권장 합니다.

윈도우에서_퀵링크_메뉴로_파워쉘_관리자_권한_실행
윈도우에서 퀵링크 메뉴로 파워쉘 관리자 권한 실행
  1. 아래의 절차로 윈도우 '파워쉘' 을 실행 해 줍니다.
    1. 윈도우 '퀵링크' 패널 (단축키:  Win +  X) 을 실행 해 줍니다.
    2. Windows PowerShell(관리자)(A) 항목을 클릭 해 줍니다.
    3. 사용자 계정 컨트롤 창이 보이는 경우 관련된 안내를 확인 후 하단 버튼을 눌러 줍니다.
파워쉘에서_삭제_스크립트_입력
파워쉘에서 삭제 스크립트 입력
  1. 파워쉘이 실행 되면 아래 설명을 참고해 명령어를 본인의 환경에 맞도록 수정 등록 합니다. 입력 후  Enter 를 눌러줍니다.
    • "C:\Users\EZM\Desktop\TEST" : 사용할 폴더의 경로를 지정, 본인의 경로로 수정 해야 합니다. 파일 또는 폴더의 경로를 확인 하는 방법은 여기에서 확인 할 수 있습니다. ( Path "$env:userprofile\Desktop\TEST" 이렇게 환경 변수를 사용해 경로를 지정할 수도 있습니다.)
    • .AddDays(-30) : 자동으로 삭제 할 일정, 30일로 되어 있지만 원하는 일자로 수정 가능 합니다.
Get-ChildItem –Path "C:\Users\EZM\Desktop\TEST" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item
  1. 명령어 입력 만으로 원하는 경로의 폴더를 지정된 일정에 따라 사용 하지 않는 파일을 자동으로 삭제 하게 됩니다.
윈도우 10 한글 입력 시 자음 모음 분리되는 문제를 해결하는 방법들

작업 스케줄러로 삭제 하는 방법-응용편

위 기본 명령어를 활용하여 작업 스케줄러에서 좀 더 다양한 옵션을 적용 해 볼 수 있습니다. 초보자의 경우 작업 스케줄러를 이용해 특정 프로그램을 자동으로 실행하거나 종료하는 방법을 통해서 기본적인 내용을 확인 할 수 있습니다.

1. 메모장에 파워쉘 스크립트 만들기

메모장에 위에서 안내한 명령어를 이용해 파워쉘 스크립트 파일을 생성 해주어야 합니다.

메모장에서_명령어_입력후_ps_확장자로_저장
메모장에서 명령어 입력후 ps 확장자로 저장
  1. 메모장(.txt) 을 실행 후 위에서 정리 해둔 명령어 (1) 를 입력 해 줍니다.
  2. 생성한 메모장 파일의 이름 과 확장자를 autocleanup.ps1 과 같이 원하는이름.ps1 (2) 형식으로 '다른 이름으로 저장' (단축키 :  Ctrl +  Shift +  S) 해 줍니다. .ps1 은 파워쉘 스크립트 파일의 확장자 형식 입니다.
윈도우 10 '장치 설정을 완료합니다' 알림을 해제하는 방법

2. 작업 스케줄러 삭제 스케줄 생성

'작업 스케줄러'를 실행 하고 여러가지 옵션을 하나 씩 설정 해 주어야 합니다.

2.1. 작업 스케줄러 실행 후 작업 만들기

우선 윈도우에서 '작업 스케줄러' 를 실행 하고 '작업 만들기'를 생성 해야 합니다.

윈도우_작업_스케줄러_검색_후_실행
윈도우 작업 스케줄러 검색 후 실행
  1. 윈도우의 검색 창에서 "작업 스케줄러" 등으로 입력 해 준 다음 검색 결과를 클릭 해 줍니다.
작업_스케줄러_라이브러리에서_새폴더_생성
작업 스케줄러 라이브러리에서 새폴더 생성
  1. '작업 스케줄러' 가 실행 되면 왼쪽 파일 트리 박스에서 '작업 스케줄러 라이브러리' 폴더를 마우스 오른쪽 버튼으로 클릭 해 메뉴를 확장 해줍니다.
  2. 메뉴에 서 새 폴더(N) 옵션을 선택 해 줍니다. 그냥 진행 해도 되지만 시스템 작업에서 작업을 구성하고 분리할 수 있도록 새 폴더를 만들고 진행 합니다.
작업_스케줄러_라이브러리_폴더_이름_지정
작업 스케줄러 라이브러리 폴더 이름 지정
  1. '새 폴더의 이름 입력' 창이 생성되면 원하는 이름을 입력 후 확인 버튼을 눌러 줍니다.
작업스케줄러에_작업_만들기_옵션_선택
작업스케줄러에 작업 만들기 옵션 선택
  1. 생성한 폴더를 다시 한번 마우스 오른쪽 버튼으로 클릭 해 메뉴를 확장 후 작업 만들(R) 옵션을 선택 해 줍니다.

2.2. 작업 만들기 일반 설정

'새작업 만들기' 창이 열리게 되면 상단 탭의 순서대로 세부 설정을 해주면 됩니다.

우선 일반 설정에서 체크할 내용 입니다.

작업_스케줄러_새작업_만들기에서_일반_탭_설정
작업 스케줄러 새작업 만들기에서 일반 탭 설정
  1. 탭 위치가 일반 으로 되어 있는지 체크 후 상단 이름(M) (1) 에 원하는 값을 지정 해 줍니다. 식별이 편한 이름으로 정해줍니다.
  2. 아래 '보안 옵션' 에서 사용자의 로그온 여부에 관계없이 실행(W) (2) 에 체크를 해 줍니다.

2.3. 작업 만들기 트리거 설정

'새작업 만들기'의 트리거 탭으로 이동 해서 동작이 진행 할 조건을 설정 해 주어야 합니다.

작업_스케줄러_트리거_새로_만들기
작업 스케줄러 트리거 새로 만들기
  1. 트리거 탭에서 하단 새로 만들기(N) 버튼을 클릭 해 줍니다.
작업_스케줄러_트리거_예약_상태_일정_등록
작업 스케줄러 트리거 예약 상태 일정 등록
  1. '새 트리거 만들기' 창이 생성 되면 왼쪽 '설정' (1) 섹션에서 원하는 옵션을 선택 해 줍니다. 어떤 옵션을 선택 해도 진행 방식은 동일 합니다.
  2. 기간을 지정 후 오른쪽 세부 설정 (2) 에서 월(H)일(A) 의 값을 정해줍니다.

2.4. 작업 만들기 동작 설정

'새작업 만들기'의 동작 탭으로 이동 해서 위 트리거 조건에 따라 수행 할 동작을 지정 해 주어야 합니다.

작업_스케줄러_동작_새로_만들기
작업 스케줄러 동작 새로 만들기
  1. 동작 탭에서 하단 새로 만들기(N) 버튼을 클릭 해 줍니다.
작업_스케줄러_새_동작_만들기_옵션_설정
작업 스케줄러 새 동작 만들기 옵션 설정
  1. '새 동작 만들기' 패널에서 아래 정보를 입력 해 줍니다.
    • 프로그램/스크립트(P) : powershell.exe
    • 인수 추가(옵션)(A): -ExecutionPolicy Bypass C:\Users\EZM\Desktop\cleanup.ps1 형식으로 입력 해 줍니다. 경로는 파워쉘 스크립트 파일 (.ps1)의 경로를 입력 해 주어야 합니다.

2.5. 작업 만들기 설정 옵션 체크

'새작업 만들기'의 설정 탭으로 이동 해서 설정 옵션을 체크 해주어야 합니다. '조건' 탭에서는 따로 설정 할 것은 없습니다.

작업_스케줄러_설정_옵션_체크
작업 스케줄러 설정 옵션 체크
  1. 아래 옵션을 추가로 체크 해 위 이미지 와 동일한 항목에 체크가 될수 있도록 해 줍니다.
    • 요청 시 작업이 실행되도록 허용(L)
    • 예약된 시작 시간을 놓친 경우 가능한 대로 빨리 작업 시작(S)
    • 작업이 실패하는 경우 다시 시작 간격(T)
  2. 설정을 모두 체크 후 하단확인 버튼을 눌러 줍니다.
작업스케줄러_저장시_사용자_계정_정보_입력이_필요_할_수_있음
작업스케줄러 저장시 사용자 계정 정보 입력이 필요 할 수 있음
  1. '새작업 만들기' 를 저장 하게 되면 사용자의 권한에 따라 '사용자 계정 정보'를 입력해야 할 수 있으니 생성 되면 입력 해 줍니다.

모든 설정이 마무리 되었고 위와 같이 설정 하게 되면 지정한 경로에 있는 오래된 파일들을 지정한 일정에 따라 자동으로 삭제 하게 됩니다.

참고: 이름을 변경하거나 폴더를 다른 위치로 이동 하게 되면 작업이 되지 않으니 경로 변경 시 스크립트, 작업 스케줄러의 경로를 모두 수정 해야 합니다.

마무리

이렇게 윈도우10에서 원하는 날짜가 지나면 자동으로 파일을 삭제하는 방법에 대해 알아 보았습니다.

기본 원리(명령, 스크립트) 만 알고 있다면 '작업 스케줄러' 등 여러 옵션들을 사용 하여 활용 될 수 있을 것 입니다. 자신이 편한 방식으로 선택 하여 사용 해 보시길 바랍니다.

실제 작동 하는지 테스트는 기간을 아주 짧게 정해두면 손쉽게 확인 할 수 있습니다.

윈도우 10 로그인 전 잠금 화면 없애기

참고

댓글로 남기기 어려운 내용은 Contact Form 에서 개별적으로 문의 할 수 있습니다. 해당 글과 연관 된 내용은 Copy를 이용해 현재 페이지의 주소를 복사 후 문의 폼에 입력시 보다 정확한 답을 얻을 수 있습니다.

5 thoughts on “윈도우10에서 지정된 날짜 경과 시 자동으로 파일 삭제하는 방법”

    • 피드백 감사합니다. 말씀 주신 -Recurse 옵션을 추가해야 한다는 것이 작업 스케줄러를 말씀하시는 거라면, cleanup.ps1 스크립트에 옵션이 포함되어 있어 다시 추가할 필요가 없습니다. 이 부분이 아니라면 어디를 말씀하시는지 알려주시면 확인 후 본문내용을 보충하겠습니다.

      응답
  1. Get-ChildItem –Path “C:\Users\park\Desktop\test” -Recurse Where-Object {($_.LastWriteTime -lt (Get-Date)AddDays(-30))} Remove-Item

    명령문은 위와 같습니다~!

    응답
    • 오류 내용을 보면 Get-Date 명령어와 AddDays 메소드 사이에 공백이 빠져 있다고 안내하고 있습니다. 즉, Get-Date)AddDays 대신 Get-Date).AddDays로 작성해야 합니다. Get-ChildItem –Path "C:\Users\park\Desktop\test" -Recurse | Where-Object {($_.LastWriteTime -lt (Get-Date).AddDays(-30))} | Remove-Item와 같이 사용해 보세요.

      응답
  2. 위의 명령어를 그대로 복사하여, 파워셀에서 실행하였으나,
    아래와 같은 에러창이 뜹니다. 도움 부탁드립니다.

    위치 줄:1 문자:105
    + … Recurse Where-Object {($_.LastWriteTime -lt (Get-Date)AddDays(-30))} …
    + ~~~~~~~
    식 또는 문에서 예기치 않은 ‘AddDays’ 토큰입니다.
    위치 줄:1 문자:105
    + … test” -Recurse Where-Object {($_.LastWriteTime -lt (Get-Date)AddDays( …
    + ~
    식에 닫는 ‘)’가 없습니다.
    위치 줄:1 문자:72
    + … em –Path “C:\Users\park\Desktop\test” -Recurse Where-Object {($_.Last …
    + ~
    문 블록 또는 형식 정의에 닫는 ‘}’가 없습니다.
    위치 줄:1 문자:117
    + … e Where-Object {($_.LastWriteTime -lt (Get-Date)AddDays(-30))} Remove …
    + ~
    식 또는 문에서 예기치 않은 ‘)’ 토큰입니다.
    위치 줄:1 문자:118
    + … Where-Object {($_.LastWriteTime -lt (Get-Date)AddDays(-30))} Remove- …
    + ~
    식 또는 문에서 예기치 않은 ‘}’ 토큰입니다.
    + CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : UnexpectedToken

    응답

Leave a Comment