首页 > 解决方案 > 批量删除除指定文件和目录外的所有文件和目录

问题描述

我正在尝试使用该目录中的 bat 文件删除特定目录中的所有文件和目录。我已经看到在 Linux 上完成此操作没有问题,但在 Windows 命令环境中,这似乎是一件苦差事。

示例:\temp\1.bat(保留)\temp\special 文件夹(保留)

里面 \temp\ 包含我要删除的所有文件夹和文件,除了 1.bat 和特殊文件夹。

我尝试过递归命令,但它们删除了目录,或者删除了所有文件并保留了目录。

例子:

attrib +r "special directory"
attrib +r "1.bat"
erase /Q *.*
rd /s /q
attrib -r "1.bat"

但这会删除所有内容。如果我删除该rd行,它会删除所有文件,而不是目录并保留 1.bat 文件(就像我需要的那样)。

我也试过:

for /d %%i in (".\*") do if /i not "%%i"=="special folder" rd /s /q "%%i"

但这也不起作用。除了“特殊文件夹”和“1.bat 文件”之外,我根本无法删除所有要删除的目录和文件。

这甚至可能吗?

标签: batch-filecmd

解决方案


@ECHO OFF
SETLOCAL
SET "sourcedir=U:\sourcedir"
SET "keepfile=1.bat"
SET "keepdir=keep me"

FOR /d %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepdir%" RD /S /Q "%%a"
FOR %%a IN ("%sourcedir%\*") DO IF /i NOT "%%~nxa"=="%keepfile%" DEL "%%a"

GOTO :EOF

您需要更改 和 的设置以sourcedir适应您的情况。该清单使用适合我的系统的设置。keepdirkeepfile

for/d命令处理所有目录,除了名称+扩展名与所需名称匹配的目录外,然后for对目标目录中的文件重复操作,删除除与所需文件名匹配的所有目录之外的所有目录。


推荐阅读