특정 폴더 및 하위 폴더를 제외한 모든 폴더 삭제

특정 폴더 및 하위 폴더를 제외한 모든 폴더 삭제

여러 파티션이 있는 SSD가 있습니다. J:\에서 작업해야 하며 다음 폴더를 제외하고 J: 내의 모든 항목을 삭제해야 합니다.

J:\System Volume Information
J:\$RECYCLE.BIN
J:\New
J:\Old Stuff

그리고 다음 하위 폴더:

J:\Papers\Folder
J:\Room\Main Documents
J:\Year\Origin\Part
J:\Year\Origin\Part Two

많이 검색하고 읽은 후 다음 코드를 작성했습니다.

@ECHO OFF
SETLOCAL
SET "sourcedir=J:\"
SET "keepdir=System Volume Information"
SET "keepdir=$RECYCLE.BIN"
SET "keepdir=New"
SET "keepdir=Old Stuff"
SET "keepdir=Papers\Folder"
SET "keepdir=Room\Main Documents"
SET "keepdir=Year\Origin\Part"
SET "keepdir=Year\Origin\Part Two"
FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
GOTO :EOF

불행하게도 위의 코드는 작동하지 않습니다(J: 내부의 모든 내용을 삭제합니다).

답변1

@echo off & cd /d J:\ || goto :eOf 

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do =;( type "%~f0" | 1>nul find /i "%%~fi" 
           );= || 1>nul 2>&1 rmdir /q /s "%%~fi"

goto :eof

:: Keep the list in the lines below the
:: full path of the folders that remained!

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

1.보관하려는 폴더 목록이 포함된 일괄 처리를 사용하세요.

J:\New
J:\Old Stuff
J:\$RECYCLE.BIN
J:\Papers\Folder
J:\Year\Origin\Part
J:\Room\Main Documents
J:\Year\Origin\Part Two
J:\System Volume Information

2.루프를 사용하여 폴더 트리 나열

for /f ^delims^= %%i in =;('@dir /ogn /b /s /a:d
    ')do

삼.루프의 각 폴더에 대해 bat 자체의 유형을 사용하고 폴더/경로가 거기에 나타나는지 확인하십시오.

type "%~f0" | 1>nul find /i "%%~fi"

4.||욕실에서 폴더/경로를 찾을 수 없는 경우( ) 삭제하세요.

type ...  find .. || rmdir /q /s "%%~fi"

5.루프를 마치고 파일을 종료합니다.

goto :eOf

추가 내용:

답변2

제안:

  1. J:\> dir /s /b /ad >DirsToRemove.bat
    목록에 표시모두J의 DIRS: (현재 드라이브)를 DirsToRemove.bat 파일에 추가합니다.
  2. 해당 파일을 편집하면
    메모장이 작동하지만(워드패드 아님) 고급 텍스트 편집기를 선호합니다.
  3. 모든 줄에서 rmdir /s /qdirname 앞에 추가하고, 이름에 공백 문자가 있으면
    이름을 -quotes로 묶습니다 . 모든 이름에 따옴표를 사용하는 것도 괜찮습니다. =>"
    rmdir /s /q "name"
    고급 텍스트 편집기를 사용하면 매크로를 사용할 수 있습니다. 매크로를 사용하는 것은 녹음 시작, 한 줄 편집, 녹음 중지만큼 쉬울 수 있습니다. 그런 다음 바로 가기 키를 사용하여 원하는 만큼 매크로를 시작할 수 있습니다.
  4. 유지하려는 디렉토리가 있는 줄을 제거하는 것을 잊지 마십시오.
  5. 저장한 다음...
  6. 하다J:\> .\DirsToRemove.bat

비슷한 일을 몇 번 해본 경우, 당면한 작업을 완료하는 데 보통 1~2분 정도 걸립니다.

관련 정보