用于删除不包含特定单词的文件夹中的文件的批处理脚本

时间:2017-05-09 12:46:36

标签: batch-file scripting textedit

我是批处理脚本的新手。我需要删除不要包含文件中某些单词的文件夹中的所有文件

找到了这段代码

@echo off
setlocal
pushd C:\Users\admin\Desktop\bat
findstr /ip /c:"importantWord" *.txt > results.txt
popd
endlocal

那我怎么能白色列出这些文件,并删除所有其他文件? 或者我认为有一个简单的方法,只需检查!包含并删除 但我不知道怎么办?

3 个答案:

答案 0 :(得分:0)

这应该有效:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET "pathToFolder=C:\FolderToEmpty"
SET "wordToSearch=ImportantWord"
FOR /F "tokens=*" %%F IN ('dir %pathToFolder% /b *.txt') DO (
    findstr /IP %wordToSearch% "%pathToFolder%\%%F">nul
    IF !ERRORLEVEL!==1 (
        DEL /Q "%pathToFolder%\%%F"
    )
)

您必须设置要删除文件的文件夹的正确路径,并将ImportantWord替换为您要查找的子字符串。

答案 1 :(得分:0)

据说,这个问题可以通过组合这些findstr开关的非常简单的方式来解决:/ V在搜索字符串未找到时显示结果,而/ M显示只是文件的名称;那就是:

@echo off
setlocal
cd C:\Users\admin\Desktop\bat
for /F "delims=" %%a in ('findstr /ipvm /c:"importantWord" *.txt') do del "%%a"

不幸的是,/ V和/ M开关的组合不能正常工作:/ V的结果基于(不是文件),所以a需要修改方法:

@echo off
setlocal
cd C:\Users\admin\Desktop\bat

rem Create an array with all files
for %%a in (*.txt) do set "file[%%a]=1"

rem Remove files to preserve from the array
for /F "delims=" %%a in ('findstr /ipm /c:"importantWord" *.txt') do set "file[%%a]="

rem Delete remaining files
for /F "tokens=2 delims=[]" %%a in ('set file[') do del "%%a"

这种方法很有效,特别是对于大文件,因为findstr命令只报告文件的名称,并在第一个字符串匹配后停止搜索。

答案 2 :(得分:0)

@echo off
setlocal
set "targetdir=C:\Users\admin\Desktop\bat"
pushd %targetdir%
for /f "delims=" %%a in ('dir /b /a-d *.txt') do (
 findstr /i /p /v /c:"importantWord" "%%a" >nul
 if not errorlevel 1 echo del "%%a"
)
popd
endlocal

不确定您要对/p文件执行什么操作 - 包含非ansi字符的文件似乎会返回错误级别1if not errorlevel 1将回显不包含所需字符串的文件 - 删除echo以实际删除文件