배치 파일. 디렉토리의 모든 파일과 폴더를 삭제


135

무선 툴킷의 캐시 폴더에있는 모든 폴더와 파일을 삭제하는 배치 파일을 갖고 싶습니다.

현재 다음과 같은 것들이 있습니다 :

cd "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS"
del *.db

그러면 RMS 디렉토리의 모든 .db 파일이 삭제 되지만이 디렉토리에서 모든 항목을 삭제하고 싶습니다. 어떻게해야합니까?


3
del /?프롬프트에서 입력 하십시오. 도구 사용법에 대한 정보를 제공합니다. 이 경우 del *.* /s작동 하지만 잘못된 디렉토리에서 수행하지 마십시오!
Michael Todd

35
rmdir /s /q c:\users\tbrollo\j2mewtk\2.5.2\appdb\RMS
forsvarir

나는 정답을 바꾸도록 투표권을 제안합니다
GregM

5
forsvarir의 답변은 RMS디렉토리도 제거하므로 의도하지 않은 것일 수 있습니다. (실제로 디렉토리의 원래 타임 스탬프와 권한을 잃기 때문에 종종 원하지 않는 것입니다.) 디렉토리의 모든 내용을 제거하지만 디렉토리 자체는 그대로 두는 방법에 대한 대답을 참조하십시오. 장소.
Bill_Stewart

답변:


51

del *.*대신에 del *.db. 모든 것을 제거합니다.


56
참고 : "삭제 하시겠습니까?"프롬프트를 무시하려면 / FQ 플래그를 추가해야합니다.del . /F /Q
Rhyuk

41
폴더가 아닌 -이 파일 만 제거
icc97

52
폴더가 삭제되지 않기 때문에 정답으로 표시되어서는 안됩니다 (질문에 명시된 바와 같이).
Bill_Stewart

158

사용하다:

  • 배치 파일 만들기

  • 아래 텍스트를 배치 파일에 복사하십시오.

    set folder="C:\test"
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
    

모든 파일 폴더 가 삭제됩니다 .


4
놀랍게도, 매월 배치 작업을 위해 파일과 폴더를 정리할 무언가를 찾고 있었고 이것이 속임수였습니다.
Dave Harding

9
이를 수행하기 전에 디렉토리가 존재하는지 확인하십시오.
Bill_Stewart

2
파일 이름에 '특수'문자가있는 경우 먼저 chcp 10000인코딩을 UTF-16으로 변경하십시오.
Demelziraptor

3
Bill_Stewart의 의견에 메모를 추가하고 싶습니다. 디렉토리가 있는지 확인하려는 이유는 그렇지 않으면 현재있는 디렉토리를 지우는 것입니다. 제 경우에는 30 분 이상 작업 한 배치 파일이었습니다. :( 폴더의 나머지 부분은 소스 제어하에있었습니다.
helios456

2
@vee (rmdir "%%i" /s/q 2>NUL || del "%%i" /s/q >NUL ) 는 오류 및 삭제 메시지를 표시하지 않도록 루프를 변경 합니다.
Carl Walsh

34
IF EXIST "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" (
    rmdir "C:\Users\tbrollo\j2mewtk\2.5.2\appdb\RMS" /s /q
)

폴더 (및 폴더 자체)에서 모든 항목이 삭제됩니다.


13
문제는 모든 내용의 디렉토리를 비우는 것이지만 디렉토리 자체는 삭제하지 않는 것입니다.
Bill_Stewart

16

del *.*파일 만 삭제하지만 하위 디렉토리는 삭제하지 않습니다. 디렉토리의 내용을 압축하기 위해이 스크립트를 사용할 수 있습니다.

@echo off
setlocal enableextensions
if {%1}=={} goto :HELP
if {%1}=={/?} goto :HELP
goto :START

:HELP
echo Usage: %~n0 directory-name
echo.
echo Empties the contents of the specified directory,
echo WITHOUT CONFIRMATION. USE EXTREME CAUTION!
goto :DONE

:START
pushd %1 || goto :DONE
rd /q /s . 2> NUL
popd

:DONE
endlocal

pushd디렉토리에 변경이있는 당신은 아이들을 삭제할. 그런 다음 rd현재 디렉토리와 모든 서브 디렉토리를 삭제하도록 요청하면 서브 디렉토리의 삭제는 성공하지만 현재 디렉토리의 삭제는 실패합니다. 2> NUL삼키는 오류가 발생 합니다. (2는 오류 스트림입니다).


6
나는 이것이 다른 사람들을 위해 설명하는 것처럼 그것이 어떻게 작동했는지 정확하게 퍼즐했습니다. 푸시는 자녀를 삭제하려는 디렉토리로 변경되었습니다. 그런 다음 rd가 현재 디렉토리와 모든 하위 디렉토리를 삭제하도록 요청하면 하위 디렉토리의 삭제는 성공하지만 현재 디렉토리의 삭제는 실패합니다. 이로 인해 2> NUL이 삼키는 오류가 발생합니다. (2는 오류 스트림입니다). 매우 교활한 스튜어트 씨!
Kinetic

"setlocal enableextensions"는 현재 디렉토리를 스택으로 동시에 푸시하고 디렉토리를 변경하는 기능을 켭니다. 이것은 XP 이전에 필요한 것으로 보이며, 나중에 기본적으로 On으로 설정되어 있기 때문입니다.
Kinetic

댓글의 정보를 답변에 통합 할 수 있습니까 (댓글은 언제라도 사라질 수 있습니다)? ( 없이 사용 "편집 :" "업데이트" 레이블 .)
피터 모텐슨

12

morty346이 게시 한 내용과 함께 이것을 정리했습니다.

set folder="C:\test"
IF EXIST "%folder%" (
    cd /d %folder%
    for /F "delims=" %%i in ('dir /b') do (rmdir "%%i" /s/q || del "%%i" /s/q)
)

변수에 정의 된 폴더가 먼저 존재하는지 빠른 확인을 추가하고 디렉토리를 폴더로 변경 한 후 내용을 삭제합니다.


2
따라서 빠른 팁- "IF EXIST"문을 사용해도 네트워크 경로에서이를 실행하려고하면 폴더를 설정하지 못하고 cmd 프롬프트 "UNC 경로가 지원되지 않습니다. windows directory "를 선택하면 Windows 디렉토리의 모든 항목이 삭제됩니다. 그러니 조심해.
CBRF23

11

del/S플래그를 사용하여 이를 수행 할 수 있습니다 (모든 서브 디렉토리에서 모든 파일을 반복하도록 지시 함).

del /S C:\Path\to\directory\*

RD의 명령도 사용할 수 있습니다. 프롬프트없이 자동으로 재귀 적으로 삭제 :

@RD /S /Q %VAR_PATH%

Rmdir (rd)


5
set "DIR_TO_DELETE=your_path_to_the_folder"

IF EXIST %DIR_TO_DELETE% (
    FOR /D %%p IN ("%DIR_TO_DELETE%\*.*") DO rmdir "%%p" /S /Q
    del %DIR_TO_DELETE%\*.* /F /Q
)

3

다음을 시도하십시오. 그것은 나를 위해 작동합니다.

"C : \ tmp"폴더에 데이터를 덤프하는 응용 프로그램이 있으며 다음이 가장 적합합니다. 데이터를 삭제 하도록 또는 아니오 를 요구하지도 않습니다 . 5 분마다 실행되도록 예약했습니다.

cd "C:\tmp"

del *.* /Q

7
"C : \ tmp"폴더가 없거나 (사용자 또는 다른 응용 프로그램이 해당 폴더를 삭제 한 경우)이 폴더를 실행하려고하면 "C : \"내의 다른 폴더에서 데이터가 삭제되지 않습니까? (나와 함께 일어났다)
Vikram

4
Vikram이 지적한 것처럼 : 1) 이것은 매우 위험하며 2) 질문에 명시된 하위 디렉토리를 제거하지 않습니다.
Bill_Stewart

2
폴더 외에도 ... del /q c:\tmp\*.*백만 번 더 안전합니다. 말할 것도없이 cd드라이브는 아닌 경로 만 변경합니다.
Nyerguds

1
이것은 끔찍한 조언입니다. 다른 사람들이 언급 했듯이이 결과로 너무 많은 필수 데이터를 제거 할 수 있습니다. 제거 된 것으로 표시되어 있습니다.
RyanfaeScotland

2

더 나은 아직 C:\windows\temp폴더 아래의 모든 것을 제거하고 싶다고 가정 해 봅시다 .

@echo off
rd C:\windows\temp /s /q

11
디렉토리가 제거 c:\windows\temp됩니다. 나는 그것이 원래의 질문이 요구 한 것이라고 생각하지 않습니다.
Bill_Stewart 2016 년

디렉토리를 제거하는 것이 가장 쉬운 것처럼 보이며 나중에 다시 만들어야 할 경우 가능합니다. 한 가지 문제는 특수 폴더 권한 손실 일 수 있습니다. 그러나 이것은 다른 대부분의 답변보다 훨씬 쉬운 것처럼 보입니다 .
madannes

1
슬프게도, 배치 스크립트에서 삭제하고 즉시 다시 작성하면 Win10에서 임의의 "액세스 거부"오류가 발생하는 것 같습니다.
Nyerguds

2

robocopy 를 사용 하여 빈 폴더를 지우려 는 폴더에 미러링 할 수 있습니다 .

robocopy "C:\temp\empty" "C:\temp\target" /E /MIR

실제 폴더를 제거하거나 다시 만들 수없는 경우에도 작동합니다.

기존의 빈 디렉토리가 필요합니다.


1
robocopy의 도움에 따르면, /MIR :: MIRror a directory tree (equivalent to /E plus /PURGE).나는 그것이 /E중복 이라고 확신합니다 .
Nyerguds

2

사용하다

set dir="Your Folder Path Here"
rmdir /s %dir%
mkdir %dir%

이 버전은 묻지 않고 삭제합니다.

set dir="Your Folder Here"
rmdir /s /q %dir%
mkdir %dir%

예:

set dir="C:\foo1\foo\foo\foo3"
rmdir /s /q %dir%
mkdir %dir%

이것이 지워질 것 C:\foo1\foo\foo\foo3입니다.

(나는 압둘라 사부인의 대답 을 언급하고 싶다 . 그를 복사하는 것에 대한 혼합이 있었다. 나는 그의 포스트를 보지 못했다. 나는 오류를 지적 해준 멜 포메 네 에게 감사하고 싶다 !)


그것은 전혀 작동하지 않습니다. 빈 디렉토리가 아닌 rmdir foo경우 오류가 발생합니다 foo.
melpomene 2016 년

@ melpomene 오류를 발견했으며 수정해야합니다!
TravieDude Minecraft 및 More

1
@Abdullah Sabouni를 어떤 식 으로든 복사하려는 것은 아닙니다. 나는 이것을 눈치 채지 못했을 것이다. 죄송 해요.
TravieDude Minecraft 및 기타

@ melpomene 나는 내 실수와 일어난 일에 대한 견해를 진술했다. 그러나 어쨌든 도움이되는 경우 삭제하지 않기로 결정했습니다. 지적 해 주셔서 감사합니다.
TravieDude Minecraft 및 기타

@TravieDudeMinecraftandMore +1-나에게도 효과가있었습니다.
Guy Avraham

0

단독 rmdir또는 del단독으로 모든 것을 삭제할 수는 없습니다 .

  • rmdir /s /q와일드 카드 매개 변수를 허용하지 않습니다. 그래서 rmdir /s /q *오류가 있습니다.
  • del /s /f /q 모든 파일을 삭제하지만 빈 하위 디렉토리는 그대로 유지됩니다.

내가 선호하는 솔루션 (다른 많은 배치 파일에서 사용 했음)은 다음과 같습니다.

rmdir /s /q . 2>NUL

0

GregM의 답변의 수정 된 버전 :

set folder="C:\test"
cd /D %folder%
if NOT %errorlevel% == 0 (exit /b 1)
echo Entire content of %cd% will be deleted. Press Ctrl-C to abort
pause

REM First the directories /ad option of dir
for /F "delims=" %%i in ('dir /b /ad') do (echo rmdir "%%i" /s/q)

REM Now the files /a-d option of dir
for /F "delims=" %%i in ('dir /b /a-d') do (echo del "%%i" /q)

REM To deactivate simulation mode remove the word 'echo' before 'rmdir' and 'del'.

-1
@echo off
@color 0A

echo Deleting logs

rmdir /S/Q c:\log\

ping 1.1.1.1 -n 5 -w 1000 > nul

echo Adding log folder back

md c:\log\

당신은 올바른 길을 가고있었습니다. 다시 삭제 된 폴더를 추가하려면 코드를 추가하십시오.


1
이 솔루션은 디렉토리를 제거하고 (따라서 권한을 잃음) 다시 작성하기 때문에 (권한이 다른 경우) 권장하지 않습니다.
Bill_Stewart

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