batch-file - 如何删除*.*(不包括某些扩展名)?

标签 batch-file cmd forfiles

我正在尝试在 Windows 上制作一个批处理文件,用于删除当前目录中的所有文件,但不包括 4 个文件扩展名(log、sdb、SDK、bat)。

我已在 Windows 上尝试过 Forfiles 命令,但这会删除当前文件夹中的所有内容(甚至包括 bat 文件)。我的命令是:

@ECHO OFF
FORFILES /M *.* /C "cmd /c IF NOT @ext=="sdb" (IF NOT @ext=="sbk" (IF NOT @ext=="log" (IF NOT @ext=="bat" DEL @FILE)))" /Q

我怎样才能让它发挥作用?

最佳答案

  • 内部引号必须使用\转义
  • 您可能需要IF/I(不区分大小写)选项
  • 您应该使用@ISDIR来排除目录
  • DEL/Q 选项在最后一个引用之后,应该在最后一个引用之前,但不需要
  • 不需要括号
  • 不需要 FORFILES/M 选项,因为您的掩码是“所有文件”

这应该有效

@echo off
forfiles /c "cmd /c if @isdir equ FALSE if /i not @ext==\"sdb\" if /i not @ext==\"sbk\" if /i not @ext==\"log\" if /i not @ext==\"bat\" del @file"

但是上面的代码非常慢,而且要输入的内容确实很多。

下面的方法更简单、更快。

@echo off
for /f "delims=" %%F in ('dir /b /a-d ^| findstr /vile ".sdb .sbk .log .bat"') do del "%%F"

关于batch-file - 如何删除*.*(不包括某些扩展名)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9424380/

上一篇:蓝牙 LE 双模

下一篇:优化技术

相关文章:

c++ - 使用路径中的空格从 C++ 执行批处理文件

MySql 使用cmd更新表并获取一列的%值

windows - 在任务计划程序中运行批处理文件后,Python.exe 保持打开状态

javascript - 查找/替换任意 JS 属性以获得更好的压缩

postgresql - pgAdmin III 大师提示 - 服务器未监听

powershell - 在 PowerShell 中回答 Plink 主机 key 和 KEX 提示

batch-file - 使用 cPDF 生成横向文件的批处理脚本?

cmd - 没有 cmd/c 的文件

batch-file - 使用命令提示符修改 Windows 防火墙