폴더와 하위 폴더에서 모든 파일을 삭제합니다


52

폴더 구조에서 모든 파일을 제거하고 싶기 때문에 빈 폴더 구조로 남아 있습니다.

배치 또는 VBScript 스크립팅 에서이를 달성 할 수 있습니까 ?

매우 기본적인 배치 명령을 시도했지만 사용자가 각 파일을 삭제할 수 있어야했습니다. 수백 개의 파일이 있기 때문에이 방법은 적합하지 않았으며 시간이 지남에 따라 크게 증가 할 것입니다.

당신은 무엇을 제안 할 수 있습니까?


재귀 삭제를 의미합니까? 실제로 할 수 있습니다. 다음과 같은 내용 rd /s /q "c:\folder a이 포함 된 모든 파일 및 폴더에서 재귀 삭제를 수행합니다.Folder A
Ramhound

할 수 있습니다 .Powershell에서 스크립트하는 방법을 모르지만 이전에 실행 된 Powershell 스크립트가 있습니다.
BobJim

2
이제는 배우기에 완벽한 시간입니다. 레거시 목적으로 배치 및 VBS 구문을 연구하지만 PS 학습에 더 많은 시간을 투자합니다.
MDMoore313

코드가 작동하는지 확실하지만 아직 코드를 확인할 기회가 없었습니다. 다시 돌아와서 초기 쿼리에 가장 적합한 답변을 선택하겠습니다.
BobJim

@BigHomie의 권장 사항을 두 번째로 살펴 보겠습니다. 방금 PowerShell을 배웠으므로 코더의 무기고에 좋은 무기가 아닙니다. 나는 지금 그것을 꽤 자주 사용합니다.
Ben

답변:


75

PowerShell을 사용하여 수행 할 수 있습니다 .

Get-ChildItem -Path C:\Temp -Include *.* -File -Recurse | foreach { $_.Delete()}

이 명령은의 각 하위 항목을 가져오고 각 항목에서 $pathdelete 메소드를 실행하며 매우 빠릅니다. 폴더 구조는 그대로 유지됩니다.

확장명이없는 파일이있는 경우

Get-ChildItem -Path C:\Temp -Include * -File -Recurse | foreach { $_.Delete()}

대신에.

-FilePowerShell v2 이후에 매개 변수가 추가 된 것으로 보입니다 . 그 경우라면

Get-ChildItem -Path C:\Temp -Include *.* -Recurse | foreach { $_.Delete()}

확장자가있는 파일에 대한 트릭을 수행해야합니다.

작동하지 않는 경우 최신 버전의 Powershell이 ​​있는지 확인하십시오.


1
그건 -Include *.*아니 -Include ., 큰 차이! :-)
MDMoore313

Get-ChildItem-경로 D : \ EmptyThisFolder -Include . 파일-재귀 | foreach {$ _. Delete ()}
BobJim

왜 사용하고 있습니까 -Include .?? 그것이 문제입니다.
MDMoore313

2
그들은 구현할 수 powershell --version없습니까? 양수로 된 버전 번호를 사용할 수 없습니까? 미친 짓이야 프로그램의 버전 번호를 찾는 방법에 대한 질문에 대해 1300 개 이상의 투표 가 있습니까?
Thomas Weller

1
@demonicdaron은 그렇지 않다. OP의 질문은 폴더 구조 를 보존 하는 것이 었습니다 .
MDMoore313

23

단기 및 제품군 PowerShell. 가장 낮은 PS 버전이 어떤 것인지 잘 모르겠습니다.

Remove-Item c:\Tmp\* -Recurse -Force

2
좋고 쉬운. 수락 된 답변이 그렇지 않은 동안 이것은 속임수였습니다!
demonicdaron

이것은 대답이 될 것입니다. rm *실제로 강제하는 것이 좋지 않기 때문에 입력 할 수도 있습니다 (확인 대화 상자에는 "모두 예"옵션이 있습니다).
J 가르시아

22

당신은 del명령으로 그렇게 할 수 있습니다 :

dir C:\folder
del /S *

/S스위치는 재귀 적 파일 만 삭제하는 것입니다.


2
파일 만 삭제하고 폴더는 그대로 두나요?
BobJim

5
예. /P옵션 을 추가 하여 모든 삭제를 확인하여 확인하도록 요청합니다.
phoops

고맙습니다. 희망적으로 많은 시간을 절약 할 수 있습니다!
BobJim

3
예. 숨겨진 파일과 시스템 파일을 삭제하려면 삭제 attrib -s -r -h Folder\*.* /s /d하기 전에 수행하십시오 . 그리고 권한을 사용하려면 takeown명령을 사용하십시오 .
Jet

2
와일드 카드를 사용할 때 / Q를 사용하여 확인을 요청 하지 않을 수 있습니다 .
Aylatan

4

원래 질문의 줄 사이에서 읽을 수있는 대체 BATCH 코드 줄을 제공 할 수 있습니다. 실행시 수행 할 작업은 60 일이 지난 파일 만 삭제하는 것입니다. 이렇게하면 예약 된 작업에이를 배치 할 수 있으며 실행시 전체 디렉토리를 날려 버리는 대신 불필요한 초과 파일이 삭제됩니다. 원하는 경우 60 일에서 5 일 또는 심지어 하루를 변경할 수도 있습니다. 폴더는 삭제되지 않습니다.

forfiles -p "c:\path\to\files" -d -60 -c "cmd /c del /f /q @path"

아이디어에 감사하지만 현재 "빈"프로세스는 매우 예정되지 않은 임시 시간에 완료 될 것이라고 생각합니다. 그래도 미래를 위해 그 코드를 유지할 것입니다! 건배
BobJim

제목은 "폴더 및 하위 폴더에서 모든 파일 삭제"라고 표시되므로 해결책이 아닙니다.
Anders Lindén


3

PowerShell을 사용하여 단일 파일 또는 폴더를 삭제하십시오. powershell에서 Delete 명령을 실행하기 전에 삭제하려는 개체에 대한 모든 권한이있는 계정으로 서버 또는 PC에 로그인되어 있는지 확인해야합니다.

예 : http://dotnet-helpers.com/powershell-demo/how-to-delete-a-folder-or-file-using-powershell/

PowerShell commnads를 사용하여 파일 삭제

항목 제거-경로 "C : \ dotnet-helpers \ DummyfiletoDelete.txt"

위 명령은“C : \ dotnet-helpers”위치에있는“DummyfiletoDelete.txt”파일을 실행하고 삭제합니다.

PowerShell commnads를 사용하여 모든 파일 삭제

항목 제거-경로 "C : \ dotnet-helpers *. *"

PowerShell commnads를 사용하여 모든 파일 및 폴더 삭제

항목 제거-경로 "C : \ dotnet-helpers *. *"-recurse

-recurse드릴 다운하여 더 많은 파일을 찾습니다. 이 –recurse매개 변수를 사용하면 PowerShell에서 권한 요청없이 자식 항목을 제거 할 수 있습니다. 또한 –force 매개 변수를 추가하여 숨김 또는 읽기 전용 파일을 삭제할 수 있습니다.

-Force 명령을 사용하여 파일을 강제로 삭제

PowerShell 명령을 사용하여 모든 파일을 강제로 삭제

항목 제거-경로 "C : \ dotnet-helpers *. *"-Force


1

PowerShell을 사용하여 시도하십시오. 이 예에서는 모든 .class 파일을 삭제하려고합니다.

Get-ChildItem '.\FOLDERNAME' -include *.class -recurse | foreach ($_) {remove-item $_.FullName}

1
  1. Windows 탐색기에서 모든 파일과 폴더가 포함 된 루트 디렉토리를 선택하십시오.

  2. 검색 *

  3. 유형별로 정렬 (모든 폴더가 맨 위에 있고 아래에 나열된 모든 파일이 있음)

  4. 모든 파일을 선택하고 Delete 키를 누릅니다.

모든 파일이 삭제되고 디렉토리 구조가 유지됩니다.


1

현재 디렉토리 및 하위 디렉토리에서 모든 파일을 삭제하고 폴더 구조는 그대로 둡니다.

( /Q) 스위치는 삭제해도 괜찮은지를 사용자에게 묻기위한 것입니다.

주의 : /Q소중한 것을 삭제하지 않도록 확인하십시오.

del /S * /Q 

1

이것이 가장 쉬운 방법입니다 IMO

PowerShell을 열고 디렉토리 ( cd)로 이동 한 다음

ls -Recurse * | rm

(Po) 모든 것이 사라졌습니다 ...

특정 확장명을 기준으로 삭제하려는 경우

ls -Recurse *.docx | rm

ls 디렉토리를 나열하고 있습니다

-Recurse powershell에게 하위 디렉토리로 이동하도록 지시하는 플래그입니다.

* 모든 것을 말한다

*.doc .doc 확장자를 가진 모든 것

| 왼쪽에서 오른쪽으로 출력을 공급

rm 지우다

다른 모든 대답은 필요 이상으로 혼란스럽게 만듭니다.


0
dir C:\testx\ -Recurse -File | rd -WhatIf
What if: Performing the operation "Remove File" on target "C:\testx\x.txt".
What if: Performing the operation "Remove File" on target "C:\testx\bla\x.txt".

-1

-Include 키워드가 Remove-Item 명령에 포함되어 있으므로 위의 답변을 보완하기 위해 실제로 Get-Childitem을 사용하고 위의 답변에서 파이프 라인으로 결과를 전달할 필요가 없습니다.

간단하게 할 수 있습니다 :

제거 항목-포함 " . " "C : \ Temp"-재귀

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