batch-file - 批量删除除指定文件和目录外的所有文件和目录
问题描述
我正在尝试使用该目录中的 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 文件”之外,我根本无法删除所有要删除的目录和文件。
这甚至可能吗?
解决方案
@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
适应您的情况。该清单使用适合我的系统的设置。keepdir
keepfile
该for/d
命令处理所有目录,除了名称+扩展名与所需名称匹配的目录外,然后for
对目标目录中的文件重复操作,删除除与所需文件名匹配的所有目录之外的所有目录。
推荐阅读
- python - 方块之间的碰撞
- java - 考虑在您的配置中定义“io.ipl.amaresh.data.JobCompletionNotificationListener”类型的 bean。那个豆子找不到
- ios - 在 SwiftUI 中动态调整注释宽度和高度
- vue.js - 如何在 nuxtjs 中访问查询字符串并将其传递给数据
- excel - VBA 中的复制粘贴语法问题 [已编辑]
- javascript - 在使用 Bootstrap 时设置画布元素的分辨率
- drupal - 如何为下面提到的编写phpunit?
- php - 如何显示与表格无关的记录
- python - 机器学习分类算法中如何实现非对称关系?
- docker - 在 docker-compose 期间尝试访问容器中的文件时权限被拒绝(UBUNTU 20.04)