删除除具有特定字符串的文件名之外的所有文件

Delete all files except filenames with specific string

我有 1000 个文件,例如 TOP_QUERIES-abc.com.au.csvTOP_QUERIES-www.abc.com.au.csvTOP_QUERIES-m.lmn.com.au.csvTOP_QUERIES-blog.com.au.csvget-files.php

是否可以删除文件夹中的所有 .csv 文件,但文件夹中以 blog.m.www.php 开头的文件除外?

我知道它在 php 中是可行的,但我如何在批处理文件中实现?

@ECHO OFF
SETLOCAL
SET "targetdir=U:\destdir"
SET "exclude=blog. m. www."
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%targetdir%\*.csv" '
 ) DO (
 ECHO %%a | findstr /B /L "%exclude%" >NUL
 IF ERRORLEVEL 1 ECHO(DEL "%targetdir%\%%a"
)

GOTO :EOF

这应该可以为您完成任务。您需要更改 targetdir 的设置以适合您的情况。

所需的 DEL 命令仅 ECHO 用于测试目的。 确认命令正确后,将ECHO(DEL更改为DEL以实际删除文件。

.php 文件被排除在外,因为它们与 *.csv 文件名不匹配 - 或者您想不删除从 .php 开始的文件?如果是这样,只需将 .php 添加到 exclude 变量中...


效率修订:

@ECHO OFF
SETLOCAL
SET "targetdir=U:\destdir"
SET "exclude=blog. m. www."
FOR /f "delims=" %%a IN (
 'dir /b /a-d "%targetdir%\*.csv" ^| findstr /B /L "%exclude%"'
 ) DO (ECHO(DEL "%targetdir%\%%a"
)

GOTO :EOF