批处理文件删除包含特定字符串的所有文件?

4

大家好,我正在尝试编写一个批处理文件,用于删除目录中的所有文件 - 基本上每个文件都将包含“status”

我不能仅通过文件扩展名来删除文件 - 有这篇文章 batch script delete file containining certain chars 然而,这似乎行不通


1
文件名中还是文件内容中包含status - Stephan
循环遍历所有文件。对每个文件执行 findstr 操作。如果 findstr 操作后的 %ERRORLEVEL% 为0,则删除该文件。 - indiv
1个回答

2
for /f "delims=" %%a in (' 
    findstr /l /i /m /c:"status" "c:\somewhere\*.*"
') do echo del "%%a"

使用findstr命令列出包含字面量(/l"status"的文件(/m),并忽略字符串大小写(/i)。使用for /f命令处理列表以对每个文件执行del操作。 del命令只会被回显到控制台。如果输出正确,请删除echo命令。 编辑:如果字符串status不在文件中而在文件名中,则代码简化为:
del "c:\somewhere\*status*"

抱歉,我完全没有得到任何乐趣 - 基本上唯一需要更改的就是 "c:\somewhere*." 部分是对的吗? 我的文件路径是这个 - C:\Users\John.Smith\Desktop\Docs\ - 所以最终的语法应该是 for /f "delims=" %a in ('findstr /l /m /c:"status" "C:\Users\John.Smith\Desktop\Docs*."') do echo del "%a"。 - Mr_Fish
@Mr_Fish,是的,您应该更改“c:\ somewhere”部分以匹配您的环境。如果要搜索的字符串可以为大写字母,请在“findstr”中包括额外的“/ i”来指示忽略大小写(我将其添加到答案中)。如果控制台输出正确(代码不删除任何内容,仅回显命令),请删除“echo”,然后再次执行代码以删除文件。 - MC ND
@Mr_Fish,记住%a是用于命令行的,而%%a则是用于批处理文件,因为百分号需要转义。 - MC ND
当然 - 我一开始尝试通过命令行运行它 - 即使在批处理文件中,这也不会运行 - 所以在cmd提示符下 - 对于/ f“delims =”%a('findstr / l / i / m / c:“status”“C:\ Users \ John.Smith \ Desktop \ Docs \ ”)do echo del“%a”- 不开心,实际上它只输出'More?'作为响应。 - Mr_Fish
"C:\Users\John.Smith\Desktop\Docs*status*" 这是文件夹的路径 - 我只想搜索文件标题,而不是文件内容 - 这就是目前代码正在执行的操作。 - Mr_Fish
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接