删除所有文件夹(特定文件夹和子文件夹除外)

删除所有文件夹(特定文件夹和子文件夹除外)

我有一个带有多个分区的 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

3.对于循环中的每个文件夹,使用 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 /q目录名前添加,如果名称中有空格字符,
    则将名称括在引号中, 对所有名称使用引号也是可以的。=>"
    rmdir /s /q "name"
    更高级的文本编辑器允许使用宏;使用宏可能就像开始录制、编辑一行、停止录制一样简单 - 然后使用快捷键根据需要多次启动宏。
  4. 请记住删除您想要保留的目录的行。
  5. 保存,然后...
  6. J:\> .\DirsToRemove.bat

当你做过几次类似的事情时,通常只需要一两分钟就能完成手头的任务。

相关内容