批处理脚本扫描子目录并删除内容中不包含特定单词的文件

问题描述 投票:0回答:1

我充其量是批处理脚本的新手,因此我们将不胜感激。我已经拼凑了以下内容,但它并没有完全按照需要工作。我需要它来搜索文件夹及其子目录中内容中没有名称 Brian 的 html 文件,并自动删除这些文件。最大的问题是,有数千个文件,几乎每个文件中都有另一个人的名字“Brianne”(当然,他们的名字必须如此相似,为什么要这么简单)。看来我已经通过使用 SET wordToSearch="" 解决了这个问题,但是这个脚本并不能始终如一地执行所有子目录的搜索/删除,有时会删除所有内容。如果我将 pathtofolder 直接指向每个单独的文件夹,它确实仅适用于该文件夹,但对于所有文件夹来说,这将需要很长时间。我不确定为什么有时它会遍历子目录并似乎因某种原因停止,而有时它会清除每个文件,即使它们确实包含单词“Brian”。

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET pathToFolder="FullPathHere"
SET wordToSearch="\<Brian\>"
FOR /F "tokens=*" %%F IN ('dir %pathToFolder% /b *.html') DO (
    findstr /IP %wordToSearch% "%pathToFolder%\%%F">nul
    IF !ERRORLEVEL!==1 (
        DEL /Q "%pathToFolder%\%%F"
    )
)

我尝试将 findstr 选项更改为 /SIP,但它仍然没有按应有的方式遍历子目录。

scripting
1个回答
0
投票

我自己解决了,但我想我会分享工作脚本,以防其他人正在寻找这样的东西:

@echo off
setlocal
set "targetdir=PathToFolder"
pushd %targetdir%
for /f "delims=" %%a in ('dir /s /b /a-d *.*') do (
 findstr /s /i /p /v "\<brian\>" "%%a" >nul
 if not errorlevel 1 del "%%a"
)
popd
endlocal
© www.soinside.com 2019 - 2024. All rights reserved.