批处理如何在指定文件夹内搜索某个关键字,包含这个关键字的文件或文件夹要删除?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了批处理如何在指定文件夹内搜索某个关键字,包含这个关键字的文件或文件夹要删除?相关的知识,希望对你有一定的参考价值。

文件夹包含多层文件夹,搜索一个关键词,把包含这个关键词的文件或文件夹删除掉

不清楚你的实际文件/情况,仅以问题中的样说明及猜测为据;以下代码复制粘贴到记事本,另存为xx.bat,编码选ANSI/GB2312,跟要处理的文件或文件夹放一起双击运行

<# :
cls&echo off&cd /d "%~dp0"&mode con lines=5000
rem 查找并删除当前目录下所有名称中包含有指定关键字/指定字符的文件和文件夹
set #=Any questions&set _=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%_% %z%
set "self=%~f0"
powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0'|Out-String|Invoke-Expression"
echo;%#% +%$%%$%/%_% %z%
pause
exit
#>
$keywords=@"
关键字1
关键字2
关键字3
关键字n
"@;

$self=get-item -literal $env:self;
$current=$self.Directory.FullName.trimend('\\');
$arr=$keywords.toLower().trim("`r`n") -split '[\\r\\n]+';
$files=@(dir -literal $current -recurse|?$_.FullName -ne $self.FullName);
for($i=0;$i -lt $files.length;$i++)
    if(test-path -literal $files[$i].FullName)
        $ismatch=$false;
        $name=$files[$i].Name.toLower();
        for($j=0;$j -lt $arr.length;$j++)
            if($name.Contains($arr[$j]))$ismatch=$true;break;
        
        if($ismatch)
            write-host $files[$i].FullName;
            if($files[$i] -is [System.IO.FileInfo])
                remove-item -literal $files[$i].FullName -force -ErrorAction SilentlyContinue;
            else
                remove-item -literal $files[$i].FullName -recurse -force -ErrorAction SilentlyContinue;
            
        
    

参考技术A

您可以使用批处理的 forfiles 命令来在指定的文件夹内搜索某个关键字,并删除包含这个关键字的文件或文件夹。具体的做法如下:

    在批处理文件中,首先使用 cd 命令切换到要搜索的文件夹所在的目录。

    然后,使用 forfiles 命令来进行搜索。该命令的语法如下:

    forfiles /P <path> /S /M *<keyword>* /C "cmd /c del /Q @path"


    其中,

    /P 参数指定要搜索的文件夹路径,例如 /P C:\\my_folder。

    /S 参数表示递归搜索子目录。

    /M 参数指定要搜索的文件名关键字,例如 /M *keyword*。这里的 * 符号表示任意字符,因此搜索的结果会包含以关键字开头或结尾的文件名。

    /C 参数指定对找到的文件进行的操作,即删除这些文件。在这里,我们使用 cmd /c del /Q @path 来删除文件。

    例如,下面的批处理命令会在 C 盘的 my_folder 文件夹内递归搜索以 keyword 开头或结尾的文件,并删除它们:


    cd C:\\

    forfiles /P my_folder /S /M *keyword* /C "cmd /c del /Q @path"


    请注意,使用 forfiles 命令删除文件

参考技术B

    打开文本编辑器,例如记事本,并输入以下内容:

@echo off

rem 设置搜索路径和关键字

set searchPath=c:\\test

set searchKey=keyword

rem 查找包含关键字的文件

for /f "delims=" %%i in ('dir /b /s /a-d "%searchPath%" ^| findstr /i /c:"%searchKey%"') do (

rem 删除包含关键字的文件

del "%%i"

)

rem 查找包含关键字的文件夹

for /f "delims=" %%i in ('dir /b /s /ad "%searchPath%" ^| findstr /i /c:"%searchKey%"') do (

rem 删除包含关键字的文件夹

rd "%%i" /s /q

)

    保存文件为 delete.bat,并将文件拖拽到命令行窗口中,按回车键运行批处理文件

追问

你好 请问如果匹配的字段在一个文本的列表里该怎么弄

追答

不好意思 我不太明白你的问题,你的意思是在子文件夹里吗?

追问

就是需要匹配的关键词很多 需要放在文本里面 上面的批处理该怎么修改

本回答被提问者采纳

合理使用搜索引擎

①不想要的内容,方法:

关键词 -关键词

②精确搜索,方法:

"关键词"

③指定网站内搜素,方法:

site:域名 关键词

④搜索文件(PDF) 方法:

filetype:文件格式 关键词

⑤指定标题搜索,方法:

intitle:关键词

 ⑥指定范围搜索

intext:关键词(网页的正文中包含这个词)
allintext:关键词1 关键词2 关键词3(网页的正文中包含这3个关键词)
inurl:关键词(在网页的网址中包含这个关键词)

 ⑦叠加使用

site:网址 关键词1 -关键词2(在这个网站中有1没有2)

site:douban.com 亲密关系 -通往灵魂的桥梁

site:网址 关键词 intitle:关键词(内容的正文包含这个词)

site:douban.com 亲密关系 intext:罗兰米勒

 

以上是关于批处理如何在指定文件夹内搜索某个关键字,包含这个关键字的文件或文件夹要删除?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找某个文件夹中大于100M的文件?

linux grep 如何搜索出包含某个字符串的所有文件 find

GOOGLE HACK 语法

shell脚本--在带本月日期的文件中搜索包含某个关键字,并返回含有关键字的文件

如何让浏览器自动标识网页里的某些关键词?(使页面内的文字自动高亮)

bat先查找文件夹再查找文件夹内的文件并打开