批量删除不包括特定文件夹下的文件(或具有特定模式/通配符的文件名,例如 Test123.csv、Test623.csv、Test854.csv)

Posted

技术标签:

【中文标题】批量删除不包括特定文件夹下的文件(或具有特定模式/通配符的文件名,例如 Test123.csv、Test623.csv、Test854.csv)【英文标题】:Batch Delete excluding files under specific folder (or file names with specific pattern /wildcard e.g. Test123.csv, Test623.csv, Test854.csv) 【发布时间】:2022-01-11 10:34:21 【问题描述】:
FORFILES /P "C:\Temp\" /D -3 /S /C "cmd /c if @isdir==FALSE del /F /Q @path"

上面的脚本工作正常,删除 Temp 及其子目录下超过 3 天的所有文件。

我想排除特定文件夹中的所有文件,比如文件夹 XYZ 或完整路径中的所有文件-> C:\Temp\ABC\XYZ

注意:XYZ 文件夹下的所有文件都具有Test*.*.csv 模式

【问题讨论】:

【参考方案1】:

forfiles 没有排除选项。您必须使用findstr /V 之类的东西来排除结果,但这本身不会构成forfiles 命令的一部分。我们只需合并一个for 循环和使用findstr /V 的ecxlude,然后删除:

@echo off
for /f "delims=" %%i in ('FORFILES /P "%temp%" /D -3 /S /C "cmd /c if @isdir==FALSE echo @path"^| findstr /VI "C:\Temp\ABC\XYZ"') do del /F /Q "%%~i"

【讨论】:

谢谢格哈德。如果文件名中包含空格,则此语法无法删除文件,例如ABC_20211101 (2).csv。它试图分别定位像“C:\Temp\ABC_20211101”和“(2).csv”这样的文件。 请告诉我你正在运行的确切代码。 哦,我这边也发现了一个错字,命令结尾"%%i~"应该是"%%~i" 感谢 Gerhard 将最终参数更改为 "%%~i" 有效。

以上是关于批量删除不包括特定文件夹下的文件(或具有特定模式/通配符的文件名,例如 Test123.csv、Test623.csv、Test854.csv)的主要内容,如果未能解决你的问题,请参考以下文章

python如何批量对文件夹里所有excel特定行进行删除?

批量删除特定目录中的部分文件夹名称

如何使用java程序批量修改特定文件夹下的文件名

Go语言-批量删除文件的命令行程序delete_tool.exe

java 20 -3 递归之删除特定目录下的特定文件

bat批量删除特定开头同一类型文件?