[batch-file] 배치 파일을 사용하여 특정 유형 (확장자)의 모든 파일을 디렉토리 아래로 재귀 적으로 삭제합니다.

dir1 및 dir2의 모든 .jpg 및 .txt 파일 (예 :)을 삭제해야합니다.

내가 시도한 것은 :

@echo off
FOR %%p IN (C:\testFolder D:\testFolder) DO FOR %%t IN (*.jpg *.txt) DO del /s %%p\%%t

일부 디렉토리에서는 작동했습니다. 다른 사람들에서는 그렇지 않았습니다.

예를 들어, 이것은 아무것도하지 않았습니다.

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

두 번째 스 니펫에서 내가 무엇을 놓치고 있습니까? 왜 작동하지 않았습니까?



답변

del명령 과 함께 와일드 카드를 사용 /S하여 재귀 적으로 수행 할 수 있습니다.

del /S *.jpg

추가

@BmyGuest는 왜 비추천 답변 ( del /s c:\*.blaawbg)이 내 답변과 다른지 물었습니다 .

있다 거대한 실행의 차이 del /S *.jpg와는 del /S C:\*.jpg. 첫 번째 명령은 현재 위치에서 실행되고 두 번째 명령은 전체 드라이브에서 실행 됩니다 .

jpg두 번째 명령을 사용하여 파일 을 삭제하는 시나리오에서 일부 응용 프로그램이 작동을 멈출 수 있으며 결국 모든 가족 사진을 잃게됩니다. 이것은 매우 성가신 일이지만 컴퓨터는 계속 실행할 수 있습니다.

그러나 일부 프로젝트에서 작업 중이고에서 모든 dll파일 을 삭제 myProject\dll하고 다음 배치 파일을 실행하려는 경우 :

@echo off

REM This short script will only remove dlls from my project... or will it?

cd \myProject\dll
del /S /Q C:\*.dll

그런 다음 드라이브에서 모든 dll파일 을 제거합니다 C:\. 모든 응용 프로그램이 작동을 멈추고 컴퓨터가 쓸모 없게되며 다음 재부팅시 영원히 갇혀있는 4 차원으로 순간 이동됩니다.

여기서 교훈은 그러한 명령 %windir%을 피할 수있는 경우 드라이브의 루트 (또는 위험 할 수있는 다른 위치 (예 :))에서 직접 실행 하지 않는 것입니다. 항상 가능한 한 로컬에서 실행하십시오.


답변

얼마 전에 삭제할 파일 확장자를 선택할 수있는 배치 스크립트를 작성했습니다. 스크립트는 해당 확장자를 가진 모든 파일에 대한 폴더와 모든 하위 폴더를 찾아 삭제합니다.

@ECHO OFF
CLS

SET found=0
ECHO Enter the file extension you want to delete...
SET /p ext="> "

IF EXIST *.%ext% (           rem Check if there are any in the current folder :)
  DEL *.%ext%
  SET found=1
)
FOR /D /R %%G IN ("*") DO (  rem Iterate through all subfolders
  IF EXIST %%G CD %%G
  IF EXIST *.%ext% (
    DEL *.%ext%
    SET found=1
  )
)

IF %found%==1 (
  ECHO.
  ECHO Deleted all .%ext% files.
  ECHO.
) ELSE (
  ECHO.
  ECHO There were no .%ext% files.
  ECHO Nothing has been deleted.
  ECHO.
)

PAUSE
EXIT

이것이 원하는 모든 사람에게 유용하기를 바랍니다. 🙂


답변

이를 사용하여 폴더 및 하위 폴더 내의 모든 파일을 삭제할 수 있습니다.

DEL "C:\Folder\*.*" /S /Q

또는 이것을 사용하여 특정 파일 유형 만 삭제합니다.

DEL "C:\Folder\*.mp4" /S /Q
DEL "C:\Folder\*.dat" /S /Q


답변

댓글을 달 수있는 평판이 부족해서 답변으로 올렸습니다. 그러나이 명령의 원래 문제는 다음과 같습니다.

@echo off
FOR %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

첫 번째 For는 재귀 구문이 부족하며 다음과 같아야합니다.

@echo off
FOR /R %%p IN (C:\Users\vexe\Pictures\sample) DO FOR %%t IN (*.jpg) DO del /s %%p\%%t

다음과 같이 할 수 있습니다.

FOR %%p IN (C:\Users\0300092544\Downloads\Ces_Sce_600) DO @ECHO %%p

실제 출력을 표시합니다.


답변

이거 야:

@echo off

:: del_ext
call :del_ext "*.txt"
call :del_ext "*.png"
call :del_ext "*.jpg"

:: funcion del_ext
@echo off
pause
goto:eof
:del_ext
 set del_ext=%1
 del /f /q "folder_path\%del_ext%"
goto:eof

pd : folder_path를 폴더로 바꿉니다.


답변

C : 드라이브에서 특정. 확장자를 삭제하려는 경우 다음 cmd를 사용하십시오.

del /s c:\*.blaawbg

암호화 바이러스에 감염된 고객이 있는데 모든 정크 파일을 찾아서 삭제해야했습니다.


답변